如何在同一批处理语句中更新新添加的列

Jas*_*kan 3 sql sql-server-2008

在SQL Server 2008中,我想向表中添加一个列并立即更新它,但前提是它们之前没有创建过它们.如果之前已创建列,我不想运行更新.

IF NOT EXISTS (SELECT *
               FROM [INFORMATION_SCHEMA].[COLUMNS] 
            WHERE [TABLE_NAME] = 'SETTINGS' AND [COLUMN_NAME] = 'COLOR_SCHEME')
BEGIN
    ALTER TABLE [SETTINGS]
    ADD [COLOR_SCHEME] int NULL

    UPDATE [SETTINGS]
    SET [COLOR_SCHEME] = 1
END
Run Code Online (Sandbox Code Playgroud)

在列添加后添加"GO"不起作用,因为这不是一个完整的批处理语句,但如果我尝试像这样运行它,我会收到错误,"无效的列名'COLOR_SCHEME'."

有关如何在运行更新时使列存在的想法?

dcp*_*dcp 5

您可以尝试使用动态SQL代替alter语句:

DECLARE @SQL NVARCHAR(4000)
SET @SQL='ALTER TABLE [SETTINGS] ADD [COLOR_SCHEME] int NULL'
EXEC(@SQL)
Run Code Online (Sandbox Code Playgroud)