Установка выходных параметров в инструкции SELECT с проверкой IF EXISTS

Я пытаюсь создать эффективную SQL-хранимую процедуру для извлечения пользовательских данных из моей базы данных, но я столкнулся с проблемой синтаксиса, которую я не могу понять.

В принципе, я хочу назначить свою выходную переменную в моей инструкции SELECT. Я также хочу узнать, действительно ли пользователь существует IF EXISTS. К сожалению, я не могу сделать оба.

Вот моя процедура:

CREATE PROCEDURE [dbo].FindUser(@UserID binary(16), @UserExists bit OUTPUT, @Name 

nvarchar(MAX) OUTPUT)
AS
 SET NOCOUNT ON
 IF EXISTS (SELECT @Name = Name FROM Users WHERE UserID = @UserID)
 BEGIN
 SET @UserExists = 1
 END
RETURN

В настоящее время он дает мне "SQL46010 :: Некорректный синтаксис рядом с @Name". ошибка. Если я удаляю IF EXISTS, оператор компилируется отлично!

Почему проверка IF EXISTS вызывает синтаксическую ошибку?

2 ответа

set @UserExists = 0;

select @Name = Name, 
 @UserExists = 1
from Users
where UserID = @UserID;


SET NOCOUNT ON
IF EXISTS (SELECT 1 FROM Users WHERE UserID = @UserID)
BEGIN
 SET @UserExists = 1
 /* do other stuff here select user name or whatever */
END

Если в users table есть запись для @UserID Выбор 1 вернет значение true для существующего предложения, и управление войдет в блок BEGIN..END.

licensed under cc by-sa 3.0 with attribution.