2013-07-29 12 views
2

У меня следующие два запроса: первый работает так, как вы ожидали. Второй вызывает исключение, в котором указано недопустимое имя столбца ISDELETED. НО я добавил, если еще структура точно, чтобы избежать этой ошибки, то, что я делаю неправильно На втором запросеSQL if statement debugging

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 

ответ

4

Перед запустить запрос DB Engine попытаться проверить код , но не подтвердите свою логику. Если в вашей таблице нет 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 
+0

Вы спасатель жизни, спасибо вам, человек! – Yohannes