使用IF EXISTS检查在SELECT语句中设置输出参数

时间:2014-01-26 20:51:13

标签: sql-server

我正在尝试创建一个有效的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

目前,它在@Name附近给了我一个" SQL46010 ::不正确的语法。"错误。 如果我删除IF EXISTS,语句编译正常!

为什么IF EXISTS检查会导致语法错误?

2 个答案:

答案 0 :(得分:4)

set @UserExists = 0;

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

答案 1 :(得分: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将为exists子句返回true,控件将进入BEGIN..END块。