1

どう思いますか、ストアドプロシージャは常に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
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

マキスはすでにあなたの質問に答えましたが、私は次のことを提案したいと思います

次の方法でコードを簡略化できます。

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 に答える