嗨,我有条件子句,我想知道可以用更少的代码行以不同的方式编写。
If Exists(select id from tTest where tId=@tId)
begin
set @flag=1;
end
else begin
set @flag=0;
end;
有没有更好的方法来编写它,所以它的代码更少并且工作相同?谢谢你的帮助。
嗨,我有条件子句,我想知道可以用更少的代码行以不同的方式编写。
If Exists(select id from tTest where tId=@tId)
begin
set @flag=1;
end
else begin
set @flag=0;
end;
有没有更好的方法来编写它,所以它的代码更少并且工作相同?谢谢你的帮助。
假设@flag
定义为BIT
:
SELECT @flag = COUNT(*) FROM dbo.tTest WHERE tId = @tId;
任何东西,但0
会设置@flag = 1
。
但是,我会说专注于简洁的代码并不总是会给你带来任何好处。你更关心短代码还是快速代码?根据索引和基数,以下代码 - 虽然较长 - 有机会短路并执行比 a 更少的读取COUNT
:
SELECT @flag = CASE WHEN EXISTS (SELECT 1 FROM dbo.tTest WHERE tId = @tId)
THEN 1 ELSE 0 END;
您也可以在没有任何聚合和谓词(如“存在”)的情况下实现它。只是:
declare @flag [bit] set @flag = 0
select @flag = 1 from tTest where tId=@tId
嗯,有紧凑...
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 不是该列的有效值。