2014-01-26 2 views
0

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

В принципе, я хочу присвоить свою выходную переменную в моей инструкции 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 вызывает синтаксическую ошибку?

ответ

4
set @UserExists = 0; 

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

Спасибо! Попытаемся попробовать это сейчас. – Eaton

+0

То, что мне было нужно, спасибо за ответ! – Eaton

0
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 

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

+0

Я хотел попытаться установить переменную имени где-нибудь, не выполняя другого запроса. – Eaton

+0

@ Eaton Exists будет давать только «True» или «False», из которых вы не сможете извлечь данные. –

+0

Зачем вам голосовать, пожалуйста, пожалуйста ??? –

Смежные вопросы