Глядя на другие вопросы here on SO и Google, похоже, указывает, что MS Sql Server не гарантирует короткого замыкания выражений в предложении WHERE.Выполняет ли SQL короткое замыкание оценки OR в WHERE CLAUSE?
Означает ли это, что выражение WHERE, подобное этому, нельзя доверять работе ...?
... WHERE (@include_voided = 1 OR mytable.void = 0) AND ...
Я часто использую этот вид выражения в своих хранимых процедурах. Изучив закорачивание по другой причине я сейчас интересно, если это необходимо заменить ...
... WHERE mytable.void = case when @include_voided=1 then mytable.void else 0 END
... как все статьи, кажется, указывают, что утверждения СЛУЧАЙ являются единственными гарантированными кратко- цепи.
Я надеюсь, что первое выражение прекрасно, потому что оно более читаемо и легче набирать.
Btw, вы получите разные результаты на '@include_voided = NULL'. Кроме того, вы не можете сделать эти условия поиска подходящими (т. Е. Нет способа поиска индекса здесь), поэтому используйте то, что удобнее писать. – wqw