Иначе выбрать ничего / пусто - PullRequest
0 голосов
/ 04 октября 2018

Мне нужно иметь оператор 'ELSE' для каждого условного оператора в моих хранимых процедурах. Как я могу вернуть, чтобы процедура ничего не возвращала?

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT --nothing/blank
END

Спасибо!

Ответы [ 6 ]

0 голосов
/ 04 октября 2018

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

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ УЧЕТНОЙ ЗАПИСИ, ГДЕ Account.username=@Username) НАЧАТЬ ВЫБРАТЬ Статус ИЗ УЧЕТНОЙ ЗАПИСИ, ГДЕ Account.username=@Username END Остальная часть требуется, когда выхочу вернуть что-то еще выше условия не удалось.

0 голосов
/ 04 октября 2018

Если вы хотите получить значение Status или NULL, если нет подходящей строки, вы можете использовать подзапрос:

select ( select Status from Account where username = @Username ) as Status;

Внешний select всегда будет возвращать результат.Если подзапрос не предоставляет значение, то результатом будет NULL.

Если вы хотите другое, т. Е. Не NULL, значение по умолчанию, которое вы можете использовать Coalesce, и подзапрос, таким образом:

select Coalesce(
  ( select Status from Account where username = @Username ), -- If found.
  0 -- Default value if not found.
  ) as Status;

NB : предполагается, что существует либо одна совпадающая строка, либо нет совпадающей строки.Код не выполнится, если подзапрос вернет более одного значения.

Обратите внимание, что при запросе таблицы только один раз любое из решений исключает возможность условия гонки с другим обновлением сеанса или удалением строки для пользователя между exists проверка и select, который возвращает значение Status.

0 голосов
/ 04 октября 2018

Попробуйте этот запрос

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT NULL as 'Status'--nothing/blank
END
0 голосов
/ 04 октября 2018
IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT NULL--nothing/blank
END
0 голосов
/ 04 октября 2018

Вы можете назначить переменную:

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username = @Username;
END;
ELSE
BEGIN
    DECLARE @X int;
    SELECT @X = 0;
END;
0 голосов
/ 04 октября 2018

Примерно так:

IF EXISTS(SELECT 1 FROM Account WHERE Account.username=@Username)
BEGIN
    SELECT Status 
    FROM   Account 
    WHERE Account.username=@Username
END
ELSE
BEGIN
    SELECT "No rows found" as Status
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...