2010-05-11 84 views
1

你認爲,存儲過程總是返回1嗎?T-SQL:if exists始終返回true?

我關心的,如果存在(..)

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 

回答

2

沒有,如果WHERE是否存在(條款不返回任何東西)返回false,因此@IsUserExisting設置爲0

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) 
+0

爲什麼選擇count(*)? – msfanboy 2010-05-11 07:57:52

+0

返回符合where子句的記錄數量。 – Fabian 2010-05-11 08:08:16

+0

所以我的代碼工作我只需要用選擇計數(*)替換選擇空值? – msfanboy 2010-05-11 09:19:08

0

你不應該使用SELECT COUNT()如果你只是在測試,看看是否存在的東西。雖然它在這種情況下應該很快返回,但如果EXISTS()在找到匹配記錄時立即返回true。選擇計數()會查看所有記錄,以便爲您提供完整的計數,從而增加不必要的開銷。

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