为什么此SQL语法会引发错误?

时间:2018-08-02 19:09:29

标签: sql sql-server

在更长的脚本中执行此语句时,我总是收到错误消息:

IF EXISTS (SELECT 1 FROM sys.columns
           WHERE name = N'uncertainty_requested' 
             AND object_id = object_id(N'workorder'))
BEGIN
    PRINT 'workorder.uncertainty_requested exists';
END
ELSE
BEGIN
    ALTER TABLE workorder
        ADD uncertainty_requested CHAR(1);

    UPDATE workorder
    SET uncertainty_requested = 'F';

    PRINT 'workorder.uncertainty_requested added.'
END 
GO

错误消息是:

  

第207级,州立1,第10行,
  无效的列名“不确定请求”。

使用SQL Server 2012。

1 个答案:

答案 0 :(得分:7)

在执行代码之前先对其进行编译,并且缺少的列是编译时错误。您可以使用动态SQL处理此问题:

ALTER TABLE workorder
    ADD uncertainty_requested CHAR(1);
exec sp_executesql N'UPDATE workorder SET uncertainty_requested = ''F''';
PRINT 'workorder.uncertainty_requested added.'