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.

0voto

Dans mon cas, je veux ajouter une nouvelle colonne unique non nulle nommée CODE mais je ne connais pas la valeur au moment de la création. J'ai défini la valeur par défaut pour cette colonne en obtenant une valeur par défaut de NewID() puis en la mettant à jour plus tard.

ALTER TABLE [WIDGET] ADD [CODE] CHAR(5) NOT NULL DEFAULT(SUBSTRING(CONVERT(CHAR(36), NEWID()), 1, 5))

ALTER TABLE [dbo].[WIDGET] WITH CHECK ADD CONSTRAINT [UQ_WIDGET_CODE] UNIQUE ([CODE])

0voto

Utilisez une colonne calculée, qui fonctionnera même avec IDENTITY les valeurs des colonnes :

CREATE TABLE #This
( Id        INT IDENTITY(1,1)
 ,MyName    VARCHAR(10)
 ,FullName  AS (Myname + CONVERT(VARCHAR(10),Id)) PERSISTED);

INSERT #This VALUES ('Item'),('Item');

SELECT * FROM #This;

DROP TABLE #This;

donne les résultats suivants :

Results as Grid

-3voto

user7040891 Points 9

Je pense que ça marchera si vous utilisez Set Identity_Insert <TableName> OFF et après l'insert Statement que vous avez écrit, utilisez simplement Set Identity_Insert <TableName> ON .

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