嗨我有条件句,我想知道用不同的代码行可以用不同的方式编写。
If Exists(select id from tTest where tId=@tId)
begin
set @flag=1;
end
else begin
set @flag=0;
end;
有没有更好的方法来编写它,所以代码更少,做同样的工作?谢谢你的帮助。
答案 0 :(得分:4)
假设@flag
被定义为BIT
:
SELECT @flag = COUNT(*) FROM dbo.tTest WHERE tId = @tId;
0
以外的任何内容都会设置@flag = 1
。
但是,我会说专注于简洁的代码并不总是对你有所帮助。您是否更关心短代码或快速代码?根据索引和基数,以下代码 - 虽然更长 - 有机会短路并执行比COUNT
更少的读取:
SELECT @flag = CASE WHEN EXISTS (SELECT 1 FROM dbo.tTest WHERE tId = @tId)
THEN 1 ELSE 0 END;
答案 1 :(得分:1)
您也可以在没有任何聚合和谓词的情况下实现它,例如“exists”。只是:
declare @flag [bit] set @flag = 0
select @flag = 1 from tTest where tId=@tId
答案 2 :(得分:0)
那么紧凑......
select @flag = isnull(power(max(id),0),0) from tTest where tId = @tId
但它可能有点不同寻常。
稍微紧凑,但更直接......
select @flag = case when max(id) is null then 0 else 1 end from tTest where tId = @tId
当然,这些假设null不是列的有效值。