sql-server - T SQL 如果列存在则(如果它有值 X 那么(

标签 sql-server t-sql

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

如果列存在并且具有一定的值(value),则执行某些操作。 如果没有,那就做点别的事。

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不存在,这不起作用

最佳答案

这里是使用 TRY CATCH block 和动态 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 

关于sql-server - T SQL 如果列存在则(如果它有值 X 那么(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39265473/

相关文章:

sql-server - 不带参数的存储过程

t-sql - 查询以查找提供所有服务的所有提供商

sql - 如何以交叉的方式确定行之间的月份差异

sql-server - 年函数不支持 dt_wstr

sql-server - 如何防止 Entity Framework 将属性设置为可为空?

sql - SQL Join 查询的执行顺序是什么?

sql-server - 我需要使用数据透视表将 SQL Server 行展平为列

sql-server - 计算 count(column) > 2 的记录

sql - 如何在 .NET/Sql Server 中在用户本地时间发送电子邮件?

sql-server - 我的 SQL 创建表为语法错误