2

whereステートメントのパラメーターでここで起こっていることのようなことをすることは可能@Ageですか?

 @AGE Varchar(8)

 SELECT NAME FROM TABLE WHERE 
 (
 If @AGE='man'
  then (AGE = 'man' or AGE = 'boy')
  else (AGE = 'man')
 )
 AND City IS NULL
4

4 に答える 4

2

はい、次のようなものです。

SELECT NAME FROM TABLE WHERE 
((@AGE='man'
   AND (AGE = 'man' or AGE = 'boy'))
OR
(@AGE <> 'man'
  AND (AGE = 'man')))
AND City IS NULL

@AGE <> 'man'@AGE 変数が null になる可能性があるかどうかに応じて、条件を微調整する必要がある場合があることに注意してください。

ここで非常によく似た質問に答えました。

これは、WHERE 句で非常に一般的な手法です。WHERE 句に「IF」ロジックを適用する場合は、適用する必要があるセクションにブール AND を使用して追加の条件を追加するだけです。

于 2012-04-17T07:07:27.057 に答える
1

接続法標準形 (「一連の AND」、parans への依存度が低い):

SELECT * 
  FROM TABLE
 WHERE ( @AGE <> 'man' OR (AGE IN ('man', 'boy') ) )
       AND ( @AGE = 'man' OR AGE = 'man' )
       AND CITY IS NULL;

ここでの考え方は、含意書き換え規則を使用することです。

( IF x THEN y )  is equivalent to  ( NOT ( x ) OR y )

ここにいくつかのテストコードがあります:

WITH T 
     AS
     (
      SELECT * 
        FROM (
              VALUES (1, 'man', NULL), 
                     (2, 'boy', NULL), 
                     (3, 'girl', NULL)
             ) AS T (NAME, AGE, CITY)
     ),
     Params
     AS
     (
      SELECT * 
        FROM (
              VALUES ('man'), 
                     ('boy'), 
                     ('girl')
             ) AS T (p_AGE)
     ), 
     Results
     AS
     (
      SELECT Params.*, T.*, 
             CASE WHEN     ( ( p_AGE <> 'man' OR (AGE IN ('man', 'boy') ) ) AND ( p_AGE = 'man' OR AGE = 'man' ) )  THEN 'TRUE'
                  WHEN NOT ( ( p_AGE <> 'man' OR (AGE IN ('man', 'boy') ) ) AND ( p_AGE = 'man' OR AGE = 'man' ) )  THEN 'FALSE'
                  ELSE 'UNKNOWN' 
             END AS result_onedaywhen, 
             CASE WHEN     ( AGE='man' OR (p_AGE='MAN' and AGE='boy') )  THEN 'TRUE'
                  WHEN NOT ( AGE='man' OR (p_AGE='MAN' and AGE='boy') )  THEN 'FALSE'
                  ELSE 'UNKNOWN' 
             END AS result_Damien_The_Unbeliever
        FROM T, Params
     )
SELECT * 
  FROM Results;
于 2012-04-17T07:45:48.380 に答える
1

これを行う 1 つの方法は、EXECを使用して String コマンドを作成することIf'sです。

このようなもの :

declare @t nvarchar(max)
@AGE Varchar(8)
set @t=' SELECT NAME FROM TABLE WHERE '


 If @AGE='man' set @t=@t+'(AGE = ''man'' or AGE = ''boy'')'
  else  set @t=@t+'(AGE = 'man')'

set @t=@t+' AND City IS NULL'
于 2012-04-17T06:57:16.867 に答える
0

または、デコード関数を使用できます

于 2012-04-17T07:26:26.810 に答える