Изменение предложения WHERE на основе входных параметров - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно изменить предложение WHERE запроса на основе значения входного параметра.

Я предполагаю, что это возможно, но кажется, что я подхожу к нему неправильно?

Упрощенная версия моей хранимой процедуры:

CREATE PROCEDURE [dbo].[SampleProc]
    @appId INT,
    @siteId INT
AS
BEGIN
    SELECT * 
    FROM T_Mytable m
    WHERE
        CASE  
           WHEN @siteId = '0' THEN m.appId = @appId
           ELSE m.appId = @AppId AND m.siteId = @siteId
        END
END 

Как этого добиться WHERE пункт. Я не могу выполнить присваивание в выражении CASE в WHERE.

1 Ответ

4 голосов
/ 21 апреля 2020

Поскольку в обоих ваших делах используется условие m.appId = @appId, вы можете реорганизовать свои WHERE logi c как:

SELECT  * 
FROM T_Mytable m
WHERE
    m.appId = @appId AND
    @siteId IN (0, m.siteId);

CASE выражения, предназначенные для генерации литеральных значений, а не логических выражений , как их вывод. Таким образом, вставка выражения CASE в предложение WHERE, как вы это сделали, не имеет смысла. Вместо этого просто напишите условия, используя AND плюс OR напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...