비트 값 열이있는 테이블이 있습니다. 연결된 항목의 모든 레코드가 true이면 true를 반환하는 함수를 작성하고 싶습니다.sql-server에서 모든 레코드를 쿼리하면 값 비싼 성능이 현저하게 향상됩니다.
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) IsCapped = 0> 0) 여러 캐스트를 수행하는 대신 false를 반환합니까?
실행 계획에서이 함수를 실행하는 것이 무거워 보이지 않습니다 (하지만 쿼리 계획을 분석하는 데 너무 익숙하지 않습니다 - 저장 된 다른 섹션과 동일한 % 비용을 갖는 것 같습니다 2 %의 proc).
편집 - 함수를 호출하고 실행 계획을 조사하는 저장된 proc를 실행할 때 - 함수를 호출하는 부분은 쿼리 비용 (배치와 관련이 있음)을가집니다. 1 %는 다른 섹션과 비교됩니다. 저장된 proc. 내가 틀린 것을 보지 않는 한 :)
고마워!
답변 해 주셔서 감사합니다. – Jen
RETURN이 함수의 마지막 줄 일 필요가 있기 때문에 약간 조정했다. 다시 @ret 값을 반환했다. – Jen
함수에서 래핑 될 코드를 업데이트했습니다. –