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

「exists」のような集約や述語なしで実装することもできます。ただ:

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 に答える