1

What do you think , does the Stored Procedure always return 1 ?

I am concerned about the 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

4 回答 4

2

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

于 2010-05-11T07:41:29.273 回答
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

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

于 2011-12-08T06:33:04.787 回答
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)
于 2010-05-11T07:52:34.890 回答
0

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

于 2010-07-15T22:39:27.487 回答