2

次の 2 つのクエリがあります。最初のクエリは期待どおりに機能します。2 番目は、無効な列名 ISDELETED という例外を発生させます。しかし、そのエラーを回避するために if else 構造を正確に追加しました。2番目のクエリで何が間違っていますか

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

1 に答える 1

4

クエリ DB エンジンを実行する前に、コードの検証を試みますが、ロジックの検証は行いません。テーブルにISDELETED列 DB がない場合、エラーが表示されます。したがって、間違ったコードを動的SQLとしてDBエンジンから隠す必要があります。動的 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
于 2013-07-29T08:49:52.583 に答える