0

SQLサーバーにいくつかのフィールドで短絡OR比較を強制しようとしています。Or の左側には単純な変数比較があり、右側にはかなり「重い」サブクエリがあります。

WHERE
(@Var = 'DefaultValue' )  OR 
Exists(select * from atable)

最初のステートメントが false の場合、 or ステートメントの右側のみを実行する方法はありますか?

case ステートメントと if else ステートメントを試しましたが、機能する構文が見つかりません。

MS SQL サーバーを使用しています

4

2 に答える 2

3

1つのSQLステートメントでやりたいことを実行することはできません。ただし、ストアドプロシージャでこのようなことを行うことができます

If @Var = 'DefaultValue' then
BEGIN
     SELECT * FROM table 
END
ELSE
BEGIN
     SELECT * FROM table
     WHERE Exists(select * from atable)
END

入力が多い場合は、動的SQLを検討する必要があります

于 2012-11-30T13:19:31.263 に答える
0

これはどう?

WHERE 1 = CASE @Var
               WHEN 'DefaultValue' THEN 1
               ELSE (SELECT TOP 1 1 FROM atable)
          END
于 2014-10-04T03:38:12.590 に答える