首页 > 解决方案 > 为什么这个 SQL 语法会引发错误?

问题描述

在较长的脚本中执行此语句时,我不断收到错误消息:

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,级别 16,状态 1,第 10 行
无效的列名称“uncertainty_requested”。

使用 SQL Server 2012。

标签: sqlsql-server

解决方案


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

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

推荐阅读