【问题标题】:Can I use EXISTS keyword in sql query for assignment of result我可以在 sql 查询中使用 EXISTS 关键字来分配结果吗
【发布时间】:2010-05-18 09:23:46
【问题描述】:

我可以在查询中使用EXISTS 分配一个值吗?目前它给我错误'='附近的语法不正确。但是当我使用这个查询时,它只会按预期运行。

IF EXISTS (SELECT @PK_LOGIN_ID=PK_LOGIN_ID FROM dbo.M_LOGIN 
    WHERE LOGIN_NAME=@LOGIN_NAME AND PASSWORD=@PASSWORD AND FK_ROLE_ID=@FK_ROLE_ID)
            RETURN @PK_LOGIN_ID
    ELSE
            RETURN 0

【问题讨论】:

  • 那么,如果(!)上面的工作,什么不?什么样的作业不起作用?

标签: database sql-server-2005 tsql sql


【解决方案1】:
RETURN  COALESCE(
        (
        SELECT  TOP 1
                PK_LOGIN_ID
        FROM    dbo.M_LOGIN 
        WHERE   LOGIN_NAME = @LOGIN_NAME
                AND PASSWORD = @PASSWORD
                AND FK_ROLE_ID = @FK_ROLE_ID
        ), 0)

【讨论】:

    【解决方案2】:

    不,你不能。您需要使用您发布的代码。

    【讨论】:

      【解决方案3】:

      您不能在 EXISTS 子句中分配变量。
      一种选择是将作业和检查分开或一起删除作业。

      SQL 语句

      IF EXISTS (
          SELECT  PK_LOGIN_ID 
          FROM    dbo.M_LOGIN 
          WHERE   LOGIN_NAME=@LOGIN_NAME   
                  AND PASSWORD=@PASSWORD 
                  AND FK_ROLE_ID=@FK_ROLE_ID)
        SELECT  @PK_LOGIN_ID = PK_LOGIN_ID 
        FROM    dbo.M_LOGIN 
        WHERE   LOGIN_NAME=@LOGIN_NAME   
                AND PASSWORD=@PASSWORD 
                AND FK_ROLE_ID=@FK_ROLE_ID
        ELSE
          SET @PK_LOGIN_ID = 0
      
      RETURN @PK_LOGIN_ID
      

      【讨论】:

        【解决方案4】:
        IF EXISTS (
            SELECT  PK_LOGIN_ID 
            FROM    dbo.M_LOGIN 
            WHERE   LOGIN_NAME=@LOGIN_NAME   
                    AND PASSWORD=@PASSWORD 
                    AND FK_ROLE_ID=@FK_ROLE_ID)
          SELECT  @PK_LOGIN_ID = PK_LOGIN_ID 
          FROM    dbo.M_LOGIN 
          WHERE   LOGIN_NAME=@LOGIN_NAME   
                  AND PASSWORD=@PASSWORD 
                  AND FK_ROLE_ID=@FK_ROLE_ID
          ELSE
            SET @PK_LOGIN_ID = 0
        
        RETURN @PK_LOGIN_ID
        

        【讨论】:

        • 欢迎来到 Stack Overflow!而不是只发布一段代码,请解释为什么这段代码解决了所提出的问题。没有解释,这不是答案。
        【解决方案5】:

        您在检索数据时不能使用存在 (@PK_LOGIN_ID),因此您需要选择它。

        SET @PK_LOGIN_ID = (
            SELECT PK_LOGIN_ID FROM dbo.M_LOGIN 
            WHERE LOGIN_NAME=@LOGIN_NAME AND PASSWORD=@PASSWORD AND FK_ROLE_ID=@FK_ROLE_ID
            )
        
        RETURN ISNULL(@PK_LOGIN_ID, 0)
        

        (假设只有 1 或 0 个匹配行)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-15
          • 2020-05-11
          相关资源
          最近更新 更多