T-SQL:如果存在总是返回true?

时间:2010-05-11 07:37:30

标签: tsql stored-procedures exists if-statement

您如何看待,存储过程总是返回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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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)

答案 2 :(得分:1)

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 !!

答案 3 :(得分:0)

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