2016-07-26 50 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) 

如果未返回行,则使用空合并功能。