更改然后更新会导致错误

时间:2017-02-28 10:13:49

标签: sql sql-server

我的脚本很简单:

IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.Columns 
               WHERE table_name = 'T1' AND column_name = 'C1')
BEGIN
    ALTER Table T1
        ADD C1 BIT NOT NULL CONSTRAINT DF_T1_C1 DEFAULT 0   

   UPDATE Table T1 
   SET C1 = 1
END
GO

我收到错误

  

关键字“表格”附近的语法不正确。

我尝试了this solution,但没有更新列值。我来到了this,但我认为这不是我的情况,因为我不想捕捉异常或进行任何交易。我有这么简单的选择吗?

放置GO分隔符也没有帮助。

正如Joe Taras指出的那样,我已经改变了我的剧本,但现在却出现了错误

  

无效的列名称“C1”。

3 个答案:

答案 0 :(得分:4)

在实际创建列之前,您需要确保UPDATE不是编译

使用EXEC

将其置于单独的上下文中
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.Columns 
               WHERE table_name = 'T1' AND column_name = 'C1')
BEGIN
    ALTER Table T1
        ADD C1 BIT NOT NULL CONSTRAINT DF_T1_C1 DEFAULT 0   

   EXEC('UPDATE Table T1 
         SET C1 = 1')
END
GO

答案 1 :(得分:3)

你的行:

UPDATE Table T1 SET C1 = 1

有错误,因为您已指定table关键字。

正确的语法是:

UPDATE T1 SET C1 = 1

编辑1

重写你的脚本如下,所以在GO分隔符后你会更新你的字段,所以你确定DBMS采用了DDL:

IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.Columns
               where table_name = 'T1' AND column_name = 'C1')
BEGIN
    ALTER Table T1
    ADD C1 BIT NOT NULL CONSTRAINT DF_T1_C1 DEFAULT 0    
END
GO

UPDATE T1 SET C1 = 1

编辑2

IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.Columns
               where table_name = 'T1' AND column_name = 'C1')
BEGIN
    ALTER Table T1
    ADD C1 BIT NOT NULL CONSTRAINT DF_T1_C1 DEFAULT 0  

    EXEC('UPDATE T1 SET C1 = 1')  
END
GO

答案 2 :(得分:0)

如果表中没有条目,则无法进行更新 在单独输入后尝试它