我有一个包含一列位值的表。我想编写一个函数,如果关联项的所有记录都为真,则返回真。
我发现这样做的一种方法是:
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%,与存储过程的其他部分相当。除非我看错了:)
谢谢!!