Column不存在时的编译

rak*_*afo 4 t-sql sql-server stored-procedures

我有一个存储过程,看起来像这样:

create procedure test as
begin
if  exists(
               select 1 from sys.columns 
                where Name      = N'Column2'
                  and Object_ID = Object_ID(Table2')
              )

select Column2 from Table2
end
Run Code Online (Sandbox Code Playgroud)

我想在db2上不存在Column2的情况下运行此过程.我不想接受SP的存在检查.目前的错误是:

消息207,级别16,状态1,过程测试,第39行[批次开始行0]无效的列名称"Column2".

有没有办法这样做?为什么是,为什么不呢?

例如,如果你检查存在表并选择不存在的表有效吗?

Gor*_*off 7

使用动态SQL:

create procedure test as
begin
    if exists (select 1
               from sys.columns 
               where Name = N'Column2' and Object_ID = Object_ID('Table2')
              )
    begin
        exec sp_executesql N'select Column2 from Table2';
    end;
end;
Run Code Online (Sandbox Code Playgroud)

  • @Sher这是一个武断的决定 - 如果你想要它背后的事实原因,你必须采访20世纪90年代末/早期的Sybase/SQL Server团队的成员. (2认同)