이 구문을 올바르게 작성하는 데 어려움을 겪고 있으며 올바르게 작성하는 방법을 알 수 없습니다.
일부 조인이있는 저장 프로 시저가 있으며 where 절은 다음과 같습니다.
WHERE
[Column1] = (SELECT Source FROM @CurrentTransition) AND
[Column2] = (SELECT Target FROM @CurrentTransition) AND
[IsDeprecated] = 0 AND
sbl.StratId is null AND
std.StratId is null AND
CASE WHEN s.StratTimeBiasId <> NULL THEN s.StratTimeBiasId IN (SELECT * FROM dbo.fnGetValidTimeBiases(CAST(@datetime AS TIME)))
오류는 단순히 Incorrect syntax near the keyword 'IN'.
이 fnGetValidTimeBiases
함수 는 외래 키가있는 Id
테이블 의 값 목록 만 반환합니다 StratTimeBiasId
.
StratTimeBiasId
열에 실제로 값이있을 때만 해당 조인을 사용하고 싶습니다 .
그것은 CASE 문이 아닙니다. 대신 간단한 부울 논리를 사용하십시오.
AND (s.StratTimeBiasId IS NULL OR s.StartTimeBiasId IS NOT NULL AND s.StratTimeBiasId IN (SELECT * FROM dbo.fnGetValidTimeBiases(CAST(@datetime AS TIME))))
위의 내용은 s.StratTimeBiasId
NULL 값이 있거나 해당 값이 해당 함수의 결과에있는 모든 항목과 일치 합니다 (함수가 단일 열만 반환한다고 가정합니까? 그렇지 않으면 오류가 발생합니다).
메모를 관련 : =
및 <>
NULL을 처리 할 때 올바른 연산자는 없습니다. 열의 값이 null이 아닌지 테스트하려면을 사용해야 column IS (NOT) NULL
합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다