压缩条件语句

时间:2013-08-21 17:30:40

标签: sql sql-server tsql

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

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

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

3 个答案:

答案 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不是列的有效值。