【问题标题】:Setting output parameters in SELECT statement with an IF EXISTS check使用 IF EXISTS 检查在 SELECT 语句中设置输出参数
【发布时间】:2014-01-26 20:51:13
【问题描述】:

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

【问题讨论】:

    标签: sql-server


    【解决方案1】:
    set @UserExists = 0;
    
    select @Name = Name, 
           @UserExists = 1
    from Users
    where UserID = @UserID;
    

    【讨论】:

      【解决方案2】:
      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 将对exists 子句返回true,控制将进入BEGIN..END 块。

      【讨论】:

      • 我想尝试在某处设置我的 Name 变量而不进行其他查询。
      • @Eaton Exists 只会产生 TrueFalse 您无法从中检索数据。
      • @AmirrezaKeshavarz 你应该只在你 101% 确定它是错误的时候投反对票,我们不是在这里玩猜谜游戏
      • 老兄对不起那是我的错误
      • 友好一点,伙计们。 (:
      猜你喜欢
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2012-01-16
      • 2013-05-09
      • 1970-01-01
      • 2012-01-03
      • 2023-03-22
      • 2014-09-22
      相关资源
      最近更新 更多