2016-07-26 47 views
1

我有列的表稱爲樣本:如何將isnull應用於變量?

Id, Name, Dept, active 

查詢:

select Id 
from Sample 
where Dept = @Dept and active = 1 

我想通過傳遞deptment稱的活躍來從樣品表名ID。可能會出現我獲得2條記錄的情況。兩個部門可能會積極。這就是爲什麼我取得前1名。有些時候可能沒有任何記錄。

這就是爲什麼我在存儲過程中使用這樣的:

declare @TempId int  

set top 1 @TempId = Id 
from Sample 
where Dept = @Dept and active = 1 

if(@TempId is null) 
begin 
    @TempId = 0 
end 

我可以在上面使用isnull選擇,而不是之後,既適合我的條件是什麼?

+0

提示:'declare @TempId int = 0' –

回答

-1

在選擇記錄時,檢查NULL值,並選擇非空的記錄。

聲明@TempId詮釋
由樣品選擇頂部1 @TempId = id其中系= @Dept和活性= 1和Id不是null

+0

這是完全錯誤的。正如OP所說,有時沒有結果被返回,沒有一個包含null。 – CompanyDroneFromSector7G

2

號首先,它必須是select,不set。 如果select沒有返回任何行,@TempId將不會更改。看到這個簡單的例子

declare @TempId int = 0; 
select @TempId = null where 1=2; 
select @TempId; 
0

我會寫下面的代碼:

DECLARE @TempId int = 
    COALESCE((SELECT TOP 1 Id FROM [Sample] WHERE Dept = @dept AND Active=1), 0) 

如果未返回行,則使用空合併功能。