Как добавить предложение WHERE условно без использования РЕГИСТРА

#sql #sql-server #conditional #where

#sql #sql-сервер #условные операторы #where-предложение

Вопрос:

Я хочу добавить предложение условно в часть WHERE хранимой процедуры, но я понимаю, что использование CASE действительно плохо. Вот, по сути, то, что я пытаюсь сделать:

 @StartDate
@EndDate
@ClientID
SELECT field_1, field_2, datefield_3 
from tblTable
Where datefield_3 Between @StartDate AND @EndDate
 --If @ClientID > 0 then add
AND field_1 = @ClientID
  

Есть предложения?

Комментарии:

1. Существует очень много случаев, когда case это лучший (и самый быстрый) инструмент для использования. Этот случай может быть не одним из них, но не исключайте case , что без тестирования вы увидите, как это происходит.

Ответ №1:

Так же просто, как:

 @StartDate
@EndDate
@ClientID
SELECT field_1, field_2, datefield_3 
from tblTable
Where datefield_3 Between @StartDate AND @EndDate
  AND (@ClientID <= 0 OR field_1 = @ClientID)
  

Если @ClientID <= 0, дополнительное условие не вычисляется. Т.е. Если @ClientID > 0, field_1 = @ClientID вычисляется!

Ответ №2:

Вот оно :

 ...
Where datefield_3 Between @StartDate AND @EndDate
AND (field_1 > 0 OR field_1 = @ClientID)
  

Ответ №3:

 @StartDate
@EndDate
@ClientID


IF ClientID>0
BEGIN
SELECT field_1, field_2, datefield_3 
from tblTable
Where datefield_3 Between @StartDate AND @EndDate
AND field_1 = @ClientID
END
ELSE
BEGIN
  SELECT field_1, field_2, datefield_3 
from tblTable
Where datefield_3 Between @StartDate AND @EndDate
END