【问题标题】:SQL Server IF EXISTS THEN 1 ELSE 2SQL Server 如果存在则 1 否则 2
【发布时间】:2016-12-07 10:42:48
【问题描述】:

使用 Sql Server 2012。我有一个存储过程,其中一部分检查用户名是否在表中。如果是,则返回 1,如果不是,则返回 2。这是我的代码:

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2

但是,我不断收到以下错误:

“1”附近的语法不正确。

如果存在 IF EXIST,这甚至可能吗?

问候,

迈克尔

【问题讨论】:

    标签: sql sql-server if-statement stored-procedures sql-server-2012


    【解决方案1】:

    如果你想这样做,那么这就是你所追求的语法;

    IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
    BEGIN
       SELECT 1 
    END
    ELSE
    BEGIN
        SELECT 2
    END
    

    您并不严格需要 BEGIN..END 语句,但最好从一开始就养成这种习惯。

    【讨论】:

      【解决方案2】:

      使用 IIF 怎么样?

      SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
      

      另外,如果使用 EXISTS 来检查行的存在,不要使用 *,只使用 1。我相信它的成本最低。

      【讨论】:

      • 在 SQL Server 中使用“SELECT *”与“SELECT 1”或“SELECT 0”和 EXISTS 没有成本差异。更多的是偏好问题。
      【解决方案3】:

      始终拥有TOP 1 1 的最佳做法。

      如果我使用SELECT 1 怎么办 -> 如果条件匹配多条记录,那么您的查询将获取所有列记录并返回 1。

      如果我使用SELECT TOP 1 1 怎么办 -> 如果条件也匹配多个记录,它将只获取任何行的存在(具有自 1 值列)并返回 1。

      IF EXISTS (SELECT TOP 1 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
      BEGIN
         SELECT 1 
      END
      ELSE
      BEGIN
          SELECT 2
      END
      

      【讨论】:

      • 这绝对没有必要 - 见this question
      • @BillTür 我仍然相信这是有效的查询。这一切都基于 WHERE 条件。如果您的条件与一条记录完全匹配,则没有问题。假设您的条件与更多的记录数匹配,那么它将花费。计算标量成本:当我选择 1 时为 16%。计算标量成本为:当我使用 SELECT TOP 1 1 时为 0% 因此,它会根据记录匹配的数量有所不同
      【解决方案4】:

      在没有SELECT 的 SQL 中,您不会产生任何结果。而不是IF-ELSE 块,我更喜欢为此使用CASE 语句

      SELECT CASE
               WHEN EXISTS (SELECT 1
                            FROM   tblGLUserAccess
                            WHERE  GLUserName = 'xxxxxxxx') THEN 1
               ELSE 2
             END 
      

      【讨论】:

        【解决方案5】:

        你可以定义一个变量@Result来填充你的数据

        DECLARE @Result AS INT
        
        IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
        SET @Result = 1 
        else
        SET @Result = 2
        

        【讨论】:

          【解决方案6】:

          您需要什么输出,selectprint 或 .. 等等。

          所以使用以下代码:

          IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-23
            • 2016-09-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多