J'ai une valeur que je reçois comme ceci:
select myValue from myTable where id=5
Je veux append une colonne nvarchar
à une autre table où la valeur par défaut sera la précédente.
Mais je ne vois pas comment stocker cette valeur précédente pour l'utiliser dans mon script de colonne d'ajout:
IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'NewColumn' AND [object_id] = OBJECT_ID(N'MySecondTable')) BEGIN ALTER TABLE MySecondTable ADD NewColumn nvarchar(250) NOT NULL DEFAULT 'my previous value' END GO
Merci d'avance pour votre aide!
SQL dynamic à la rescousse:
DECLARE @defval NVARCHAR(500)=LEFT((SELECT myValue FROM myTable where id=5),250); SET @defval=REPLACE(@defval,N'''',N''''''); -- double single quotes for dynamic SQL statements DECLARE @stmt NVARCHAR(MAX)=N' IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name]=N''NewColumn'' AND [object_id]=OBJECT_ID(N''MySecondTable'')) BEGIN ALTER TABLE MySecondTable ADD NewColumn nvarchar(250) NOT NULL DEFAULT N'''+@defval+''' END; '; EXECUTE sp_executesql @stmt;
DECLARE @default nvarchar(250) DECLARE @SQL nvarchar(max) SELECT @default = myValue from myTable WHERE id=5 IF NOT EXISTS(SELECT * FROM sys.columns WHERE [name] = N'NewColumn' AND [object_id] = OBJECT_ID(N'MySecondTable')) BEGIN SET @SQL = ' ALTER TABLE MySecondTable ADD NewColumn nvarchar(250) NOT NULL DEFAULT ''' + @default+'''' EXEC sp_executesql @SQL END GO