114 votes

Ajouter une colonne à un tableau avec une valeur par défaut égale à la valeur d'une colonne existante.

Comment ajouter une colonne à une table SQL Server avec une valeur par défaut qui est é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 de valides sont les constantes, les expressions constantes et (dans certains contextes) les variables. contextes) les variables. Les noms de colonnes ne sont pas autorisés.

88voto

Kapil Khandelwal Points 9909

Essayez ça :

ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (0)
Go
Update tablename SET newcolumn = oldcolumn Where newcolumn = 0
Go

18voto

Herman Kan Points 215

Le site AFTER INSERT L'approche de l'approche de déclen déclen déclen déclen déclen déclen déclen déclen implique une surcharge en raison de UPDATE déclaration. Je suggère d'utiliser un INSTEAD OF INSERT déclencher, comme suit :

CREATE TRIGGER tablename_on_insert ON tablename 
INSTEAD OF INSERT 
AS
INSERT INTO tablename (oldcolumn, newcolumn)
SELECT oldcolumn, ISNULL(newcolumn, oldcolumn)
FROM inserted

Cela ne fonctionne cependant pas si le oldcolumn est une colonne d'auto-identité.

15voto

ypercube Points 62714

Je ne les aime pas beaucoup mais voici comment vous pourriez faire avec une AFTER INSERT déclencher :

CREATE TRIGGER TableX_AfterInsert_TRG 
  ON TableX 
AFTER INSERT
AS
  UPDATE TableX AS t
  SET t.newcolumn = t.oldcolumn
  FROM Inserted AS i
  WHERE t.PK = i.PK ;              -- where PK is the PRIMARY KEY of the table

5voto

Pour prolonger Kapil Pour obtenir la réponse de l'auteur et éviter la contrainte par défaut indésirable, essayez ceci :

ALTER TABLE tablename ADD newcolumn type NOT NULL CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN DEFAULT -9999
Go
Update tablename SET newcolumn = oldcolumn
Go
ALTER TABLE tablename DROP CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN
Go

Remplacez -9999 par 'noData' si votre type est varchar, nvarchar, datetime,... ou par toute donnée compatible pour les autres types : la valeur spécifique n'a pas d'importance, elle sera effacée par la 2ème instruction.

5voto

Vijai Points 1001

Vous pouvez utiliser une colonne calculée pour insérer une nouvelle colonne dans un tableau en fonction de la valeur d'une colonne existante.

ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn) PERSISTED;

OU, si vous voulez apporter des modifications à la valeur en fonction de la valeur de la colonne existante, utilisez

ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn * 1.5) PERSISTED;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X