如果列存在则为T SQL(如果它的值为X则为

时间:2016-09-01 07:38:06

标签: sql-server tsql

我需要执行以下逻辑子句:

如果列存在且具有特定值,则执行某些操作。 如果没有,那就做点别的。

IF EXISTS(
    SELECT *
    FROM sys.columns 
    WHERE Name      = N'legacyoptions'
      AND Object_ID = Object_ID(N'config '))
BEGIN
    if ( select legacyoptions from config)=1 
        begin 
            Do stuff when legacy=1
        end
        else begin
            Do stuff when legacy !=1 
        END 
else 
begin
  do stuff when legacy is not present
end 

但是,如果legacyoptions不存在,这不起作用

3 个答案:

答案 0 :(得分:1)

试试这个:(我想你要留下if的结尾)

IF EXISTS(
    SELECT *
    FROM sys.columns 
    WHERE Name      = N'legacyoptions'
      AND Object_ID = Object_ID(N'config '))
BEGIN
    if ( select legacyoptions from config)=1 
        begin 
            Do stuff when legacy=1
        end
        else begin
            Do stuff when legacy !=1 
        END 
end
else 
begin
  do stuff when legacy is not present
end 

答案 1 :(得分:1)

这是使用TRY CATCH块和动态SQL的方式,因此这个代码块将在数据库中没有表config和/或legacyoptions字段的情况下进行编译。

BEGIN TRY
    DECLARE @legacyoptions int;  
    EXECUTE sp_executesql N'select TOP 1 @legacyoptions=legacyoptions from config', 
                          N'@legacyoptions int OUTPUT', 
                          @legacyoptions OUTPUT;
    if @legacyoptions=1 
        begin 
          -- Do stuff when legacy=1
        end
        ELSE 
        BEGIN
          -- Do stuff when legacy !=1 
        END   
END TRY  
BEGIN CATCH  
     -- do stuff when legacy is not present
END CATCH 

答案 2 :(得分:0)

这有效,但对我来说似乎很愚蠢。

IF EXISTS( SELECT * FROM sys.columns WHERE Name = N'legacyoptions' AND Object_ID = Object_ID(N'config ')) BEGIN exec(' if (select legacyoptions from config)=1 begin print ''Config==1'' end else begin print ''Config!=1'' end ') end else begin print 'no legacy' end