ビット値の列を持つテーブルがあります。関連付けられたアイテムのすべてのレコードが true の場合に true を返す関数を作成したいと考えています。
私が見つけた1つの方法は次のとおりです。
Select @Ret = CAST(MIN(CAST(IsCapped as tinyInt)) As Bit)
from ContractCover cc
Inner join ContractRiskVersion crv on cc.ContractRiskId = crv.ContractRiskId
WHERE crv.ContractVersionId = @ContractVersionId
AND cc.IsActive = 1
return @ret
しかし、最小値を取得するために int にキャストするのは高価ですか? 代わりに、次のように基づいてクエリを実行する必要があります。
(count(Id) where IsCapped = 0 > 0) 複数のキャストを行うのではなく、false を返しますか?
実行計画では、この関数の呼び出しが実行に重いようには見えません (しかし、私はクエリ計画の分析にあまり慣れていません - 2 のようなストアド プロシージャの別のセクションと同じ % コストを持っているようです) %)。
編集 - 関数を呼び出すストアド プロシージャを実行して実行プランを確認すると、関数を呼び出す部分のクエリ コストは (バッチと比較して) 1% で、ストアド プロシージャの他のセクションに匹敵します。私が間違ったことを見ていなければ:)
ありがとう!!