我有一个名为sample with table的表:
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 :(得分:2)
没有。首先,它必须是select
,而不是set
。
如果select
没有返回任何行,则不会更改@TempId。看到这个简单的例子
declare @TempId int = 0;
select @TempId = null where 1=2;
select @TempId;
答案 1 :(得分:0)
我会写下面的代码:
DECLARE @TempId int =
COALESCE((SELECT TOP 1 Id FROM [Sample] WHERE Dept = @dept AND Active=1), 0)
如果没有返回任何行,则使用NULL合并功能。
答案 2 :(得分:-1)
在选择记录时,检查NULL值,并选择NOT NULL记录。
声明@TempId int
从样本中选择前1个@TempId = Id,其中Dept = @Dept并且active = 1且Id不为空