こんにちは、少ないコード行で別の方法で記述できるのではないかと思っている条件節があります。
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;
「exists」のような集約や述語なしで実装することもできます。ただ:
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 が列の有効な値ではないことを前提としています。