列不存在时的编译

时间:2016-09-22 15:12:34

标签: sql-server tsql 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

我想在db上运行此过程,其中 Column2不存在。我不想让SP存在。目前错误是:

  

Msg 207,Level 16,State 1,Procedure test,Line   39 [批次开始行0]无效的列名称' Column2'。

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

以及为什么例如你检查存在表并选择不存在的表有效?

1 个答案:

答案 0 :(得分: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;