Comment ajouter une colonne à une table SQL Server avec une valeur par défaut égale à la valeur d'une colonne existante?
J'ai essayé cette instruction T-SQL:
ALTER TABLE tablename
ADD newcolumn type NOT NULL DEFAULT (oldcolumn)
mais cela donne une erreur:
Le nom "oldcolumn" n'est pas autorisé dans ce contexte. Les expressions valides sont des constantes, des expressions constantes et (dans certains contextes) des variables. Les noms de colonne ne sont pas autorisés.
sql
sql-server-2008
dodos
la source
la source
UPDATE
alors, j'en ai bien peur.Réponses:
Essaye ça:
la source
Je ne les aime pas beaucoup mais voici comment vous pouvez faire cela avec un
AFTER INSERT
déclencheur:la source
L'
AFTER INSERT
approche de déclenchement implique une surcharge en raison de l'UPDATE
instruction supplémentaire . Je suggère d'utiliser unINSTEAD OF INSERT
déclencheur, comme suit:Cela ne fonctionne pas si le
oldcolumn
est une colonne d'auto-identité.la source
INSTEAD OF
les déclencheurs ne fonctionnent pas non plus lors de l'utilisation de tables temporelles:SYSTEM_VERSIONING = ON
Pour étendre la réponse de Kapil et éviter la contrainte par défaut indésirable, essayez ceci:
Remplacez -9999 par 'noData' si votre type est varchar, nvarchar, datetime, ... ou par toute donnée compatible pour d'autres types: la valeur spécifique n'a pas d'importance, elle sera effacée par la 2ème instruction.
la source
Vous pouvez utiliser une colonne calculée pour insérer une nouvelle colonne dans une table basée sur une valeur de colonne existante
OU, si vous souhaitez apporter des modifications à la valeur en fonction de la valeur de colonne existante, utilisez
la source
Pour mon cas, je souhaite ajouter une nouvelle colonne unique non nulle nommée CODE mais je ne connais pas la valeur au moment de la création. Je lui ai défini la valeur par défaut en obtenant une valeur par défaut de NewID (), puis je mets à jour plus tard.
la source
Je pense que cela fonctionnera si vous utilisez
Set Identity_Insert <TableName> OFF
et après la déclaration d'insertion que vous avez écrite, utilisez simplementSet Identity_Insert <TableName> ON
.la source