SQL Alter Table然后修改值

时间:2009-08-18 12:52:57

标签: sql alter-table

我正在处理一个SQL脚本,当我创建(或编辑)一个列然后尝试修改该新列时,我遇到了一个问题。

例如:

BEGIN
    ALTER TABLE SampleTable ADD ColumnThree int 
END

IF (EXISTS (SELECT * FROM sys.columns WHERE name = 'ColumnThree'))
BEGIN
    UPDATE SampleTable SET ColumnThree = 0
END

现在我认为BEGIN / END块会将这两个项目分开,但是我收到错误“无效的列名'ColumnThree'。”当我试图运行它。为什么?第一个BEGIN / END不应该设置ColumnThree以及IF(EXISTS应该保护UPDATE语句在该列名称不存在时运行。)

这样做的正确方法是什么? (我似乎有几个类似的情况需要这样做。)

1 个答案:

答案 0 :(得分:6)

您需要GO,而不是BEGIN/END。此外,您可能需要稍微编辑EXISTS查询,以确保您获得正确的表格:

ALTER TABLE SampleTable ADD ColumnThree int 
GO

IF (EXISTS 
        (SELECT 1 
         FROM 
             sys.columns c 
             INNER JOIN sys.tables t ON 
                 c.object_id = t.object_id 
         WHERE 
             t.name = 'SampleTable' 
             AND c.name = 'ColumnThree'))
BEGIN
    UPDATE SampleTable SET ColumnThree = 0
END

如果您使用多个架构,您也需要通过sys.schemas进入支票。