1

嗨,我有条件子句,我想知道可以用更少的代码行以不同的方式编写。

If Exists(select id from tTest where tId=@tId)
begin
   set @flag=1;
end
else begin
  set @flag=0;
end;

有没有更好的方法来编写它,所以它的代码更少并且工作相同?谢谢你的帮助。

4

3 回答 3

4

假设@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;
于 2013-08-21T17:31:59.287 回答
1

您也可以在没有任何聚合和谓词(如“存在”)的情况下实现它。只是:

declare @flag [bit] set @flag = 0
select @flag = 1 from tTest where tId=@tId
于 2013-08-21T18:39:55.553 回答
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 不是该列的有效值。

于 2013-08-21T18:15:21.037 回答