【问题标题】:SQL if statement debuggingSQL if 语句调试
【发布时间】:2013-07-29 08:48:14
【问题描述】:

我有以下两个查询,第一个按您的预期工作。第二个引发一个异常,说无效的列名 ISDELETED。但是我已经精确地添加了 if else 结构以避免该错误,我在第二个查询中做错了什么

IF COL_LENGTH('vwAs', 'IsActive') IS NOT NULL  
select  1  
ELSE IF COL_LENGTH('vwABCs', 'IsDeleted') IS NOT NULL
  select 0   
ELSE SELECT -1

IF COL_LENGTH('vwAs', 'IsActive') IS NOT NULL  
select   Count(*) [vwB] from [vwAs] WHERE ISACTIVE = 1 
ELSE IF COL_LENGTH('vwABCs', 'IsDeleted') IS NOT NULL
  select Count(*) [vwABCsActive] from [vwABCs] WHERE ISDELETED = 0      
ELSE SELECT -1

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-server-2012


    【解决方案1】:

    在运行查询数据库引擎之前尝试验证您的代码,但不验证您的逻辑。如果您的表没有 ISDELETED 列 DB 会显示错误。因此,您必须将您的 错误 代码从 DB Engine 隐藏为动态 sql。动态sql不会被验证。

    IF COL_LENGTH('vwAs', 'IsActive') IS NOT NULL  
    select   Count(*) [vwB] from [vwAs] WHERE ISACTIVE = 1 
    ELSE IF COL_LENGTH('vwABCs', 'IsDeleted') IS NOT NULL
      exec('select Count(*) [vwABCsActive] from [vwABCs] WHERE ISDELETED = 0')
    ELSE SELECT -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多