【问题标题】:T-SQL: if exists always return true?T-SQL:如果存在总是返回true?
【发布时间】:2011-02-18 00:36:50
【问题描述】:

你怎么看,存储过程总是返回 1 吗?

我担心 if exists(..)

    BEGIN

    DECLARE @IsUserExisting bit

 SET NOCOUNT ON

    IF Exists
 (
  Select null FROM G_User WHERE
    SamAccountName = @SamAccountName
   AND NetBIOSDomainName = @NetBIOSDomainName   
 )
  BEGIN
     SET @IsUserExisting = 1     
  END
    ELSE
  BEGIN
     SET @IsUserExisting = 0    
  END

 Select @IsUserExisting

END

【问题讨论】:

    标签: tsql stored-procedures exists if-statement


    【解决方案1】:

    不,如果 WHERE 子句不返回任何内容 IF Exists() 返回 false 并因此将 @IsUserExisting 设置为 0。

    【讨论】:

      【解决方案2】:

      Makis 已经回答了您的问题,但我想提出以下建议

      您可以通过以下方式简化代码:

      declare @IsUserExisting bit;
      set @IsUserExisting = (
      select count(*) from G_User
      where SamAccountName = @SamAccountName and
            NetBIOSDomainName = @NetBIOSDomainName);
      
      select @IsUserExisting;
      

      我认为以下内容在您的情况下更短。

      select count(*) from G_User
      where SamAccountName = @SamAccountName and
      NetBIOSDomainName = @NetBIOSDomainName)
      

      【讨论】:

      • 返回它可以找到满足您的 where 子句的记录数量。
      • 所以我的代码可以工作,我只需要将 select null 替换为 select count(*) ?
      • 您的代码已经像 Makis 所说的那样工作,但是我会使用我的第二个示例。
      • 有趣的是为什么我的老板说代码总是会返回真......这让我很困惑所以我在这里问......
      【解决方案3】:

      如果您只是测试是否存在某些东西,则不应使用 Select Count()。虽然在这种情况下它应该很快返回,但 If EXISTS() 将在找到匹配记录时立即返回 true。 Select Count() 将查看所有记录以便为您提供完整的计数,从而增加不必要的开销。

      【讨论】:

        【解决方案4】:
        BEGIN
        
            DECLARE @IsUserExisting bit
        
         SET NOCOUNT ON
        
            IF Exists
         (
          Select null FROM G_User WHERE
            SamAccountName = @SamAccountName
           AND NetBIOSDomainName = @NetBIOSDomainName   
         )
          BEGIN
             SET @IsUserExisting = 1     
          END
            ELSE
          BEGIN
             SET @IsUserExisting = 0    
          END
        
         Select @IsUserExisting
        
        END
        

        我尝试使用它,但当它设置为 true 时,它​​设置为 @IsUserExisting = -1 !!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-21
          相关资源
          最近更新 更多