SQL Определите, имеет ли параметр значение - PullRequest
1 голос
/ 10 марта 2011

Как мне использовать оператор IF, чтобы определить, имеет ли значение более одного параметра, затем выполнить какую-то работу, если только один параметр имеет значение, а затем выполнить другую работу. Это возможно с SQL, если? Я просто пытаюсь определить, имеет ли один параметр значение или значение имеет несколько параметров, потому что если это так, то мне нужно сделать что-то совершенно другое. Я попытался сделать оператор SQL, но он не работал должным образом. Может ли кто-нибудь указать мне правильное направление?

Ответы [ 5 ]

11 голосов
/ 10 марта 2011

В SQL, чтобы проверить, имеет ли параметр значение, вы должны сравнить значение со значением NULL. Вот немного переработанный пример:

Declare @Param1 int  
Declare @param2 int = 3

IF (@Param1 is null AND @param2 is null)
BEGIN
    PRINT 'Both params are null'
END
ELSE
BEGIN
    IF (@Param1 is null)
        PRINT 'param1 is null'
    ELSE 
    IF (@Param2 is null)
        PRINT 'param2 is null'
    ELSE
        PRINT 'Both params are set'
END
2 голосов
/ 10 марта 2011

Вы можете проверить значения параметров для значений NULL.Но на первый взгляд мне кажется, что вы должны проверить параметры ДО перехода к SQL ...

Как только вы знаете, что вам нужно сделать, вызовите этот SQL или хранимую процедуру.

Если вы сделаете это таким образом, вы сможете упростить ваш SQL, потому что вы передаете только те параметры, которые вам действительно необходимо передать.

На самом деле, чем больше я думаю об этом, тем важнее делать это таким образом.Таким образом, вы можете использовать значения NULL для других вещей.

Простой пример: получение списка сотрудников.Сотрудники активны или неактивны - передайте логический параметр @IsActive (если true, показывать только активных сотрудников, если false, показывать только неактивных сотрудников, если NULL, то показывать всех сотрудников)

1 голос
/ 10 марта 2011

Вот пример

if @param1 = 'this value' and @param2 = 'another value'
  begin
  -- do things here
  end
else if @param1 = 'something else'
  begin
  -- do other work
  end
else
  -- do different things
1 голос
/ 10 марта 2011

В T-SQL вы можете использовать функцию ISNULL.

0 голосов
/ 10 марта 2011

Ответ, предоставленный @ Catch22, хорош для вашего вопроса.Но использование IF в частности и процедурных процедур в целом в sql должно быть сведено к минимуму.Поэтому, возможно, следующее решение с использованием оператора case может лучше соответствовать тому, что вы хотите сделать:

select Case When @Param1 is null and @Param2 is null Then ...-- both params null
            When @Param1 is null then ....  -- param1 is null
            When @Param2 is null then ....  -- param2 is null
    Else ....  -- both params set
       End
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...