Как определить условие IF в условии WHERE в SQL? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь простой оператор if в рамках условия в SQL.Мне не нужен оператор CASE, поскольку он очень прост.

Пример:

CREATE PROCEDURE [dbo].[usp_GetStatus]
    @siteId INT,


    ........
    FROM sites
    WHERE StartDate = @reportMonth
      AND..
      AND ...
      AND IF(@siteId > 0) sites.SiteId = @siteId 
    ........

Я бы хотел определить простое, как указано выше.

Мой siteId параметр может быть 0 или больше, если пользователь передает целочисленное значение.Я хочу опустить условие AND, если параметр siteId равен 0.

Ответы [ 2 ]

3 голосов
/ 27 мая 2019

Обычно вы обрабатываете это с помощью логической логики в вашем SQL. Так что вы можете просто написать:

WHERE  StartDate = @reportMonth
AND..
AND ...
AND (@siteId <=0 OR  sites.SiteId = @siteId)

Таким образом, если @siteId не больше 0, он игнорирует остальную часть предложения OR, но если это так, то он оценивает ваше предложение sites.SiteId. Обычно для хранимого процесса я устанавливаю значение по умолчанию на ноль и проверяю на ноль:

CREATE PROCEDURE [dbo].[usp_GetStatus]

@siteId INT = NULL,
........
from sites;
 WHERE  StartDate = @reportMonth
AND..
AND ...
AND (@siteId IS NULL OR  sites.SiteId = @siteId)
1 голос
/ 27 мая 2019

Я бы скорее предложил

CREATE PROCEDURE [dbo].[usp_GetStatus]
    @siteId INT,


    ........
    FROM sites
    WHERE StartDate = @reportMonth
      AND..
      AND ...
      AND 
sites.SiteId = case when @siteId > 0 then @siteId else sites.SiteId end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...