我正在尝试创建一个有效的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检查会导致语法错误?
答案 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
块。