6

与えられた:

WHERE (@Id Is NULL OR @Id = Table.Id)

@Idがnullの場合:式はtrueと評価されます。2番目の部分@Id=Table.Idは引き続き考慮されますか?または、最初の部分が真であるとすると、式がtrueと評価されるだけで十分です(これはc#の場合です)。

これは、すべての部分が評価されているかどうかを知ることが重要な、はるかに複雑なORステートメントのために関連しています。


アップデート:

それ以来、この構文が良い代替手段であることがわかりました

WHERE (Table.Id = ISNULL(@Id, Table.Id))
4

2 に答える 2

11

ある場合もあるし、そうでない場合もあります。SQL Serverは、ブール演算子の短絡を保証するものではありません。正確性を保証するものではありません。このブログエントリを参照してください:ブール演算子の短絡

このような@variablesに依存する複雑なクエリは、明示的なIFステートメントとして記述した方がはるかに優れています。

IF (@id IS NULL)
  SELECT ... FROM ... WHERE ...
ELSE
  SELECT ... FROM ... WHERE ...
于 2009-11-19T05:15:10.360 に答える
1

そのようなクエリでは、実行プランはそれほど優れていない可能性があります。両方が評価されます。

于 2009-11-19T05:12:21.303 に答える