在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
在添加列之后放置“GO”不起作用,因为这不是一个完整的批处理语句,但是如果我尝试像这样运行它,我会收到错误“无效的列名'COLOR_SCHEME'。 “
有关如何在运行更新时使列存在的任何想法?
答案 0 :(得分:5)
您可以尝试使用动态SQL代替alter语句:
DECLARE @SQL NVARCHAR(4000)
SET @SQL='ALTER TABLE [SETTINGS] ADD [COLOR_SCHEME] int NULL'
EXEC(@SQL)
答案 1 :(得分:2)
另一种可能性是跨批次保存IF标准:
CREATE TABLE ##Temp_Add_Color_Scheme (new_column BIT)
INSERT INTO ##Temp_Add_Color_Scheme VALUES (0)
IF NOT EXISTS (SELECT *
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = 'SETTINGS' AND
[COLUMN_NAME] = 'COLOR_SCHEME')
BEGIN
UPDATE ##Temp_Add_Color_Scheme SET new_column = 1
ALTER TABLE [SETTINGS]
ADD [COLOR_SCHEME] int NULL
END
GO
DECLARE @new_column BIT
SELECT @new_column = new_column FROM ##Temp_Add_Color_Scheme
IF (@new_column = 1)
BEGIN
UPDATE [SETTINGS]
SET [COLOR_SCHEME] = 1
END
DROP TABLE ##Temp_Add_Color_Scheme
答案 2 :(得分:0)
如果列的内容是固定的,您是否可以简单地在其中添加默认值而不是更新它?
ALTER TABLE [SETTINGS]
ADD [COLOR_SCHEME] int NULL
DEFAULT 1 WITH VALUES ;