나는 T-SQL 쿼리 (SQL 서버 2,012분의 2,008)가 WHERE "부울"SQL 서버 :에서 하위 쿼리 다음과 같은 구조 사용하는 절
WHERE (@param1 IS NULL OR column1 = @param1)
AND (@param2 IS NULL OR column2 = @param2)
AND (@param3 IS NULL OR column3 = @param3)
이것은 어떤을 최적화 자동으로 잘 작동 및 AND WHERE 절에서 NULL 매개 변수를 사용하여 부분을 수정했습니다.
WHERE
(@param1 IS NULL OR column1 IN (SELECT column
FROM table
WHERE column = @param1))
AND (@param2 IS NULL OR column2 IN (SELECT column
FROM table
WHERE column = @param2))
AND (@param3 IS NULL OR column3 IN (SELECT column
FROM table
WHERE column = @param3))
내 질문은 왜 최적화도 "IN"을 고려할 것입니다 : 나는 하위 쿼리와 함께이 같은 일을 수행 할 때
그러나, 옵티마이 저는 PARAM이 NULL 경우에도 여전히 하위 쿼리를 실행하기 위해 나타납니다 param이 NULL이라는 사실 때문에 쿼리의 일부가 이미 "단락되어"있어야합니다.
내가 아는 한 SQL Server에는 '단락'이 없습니다. 'CASE'를 사용하여'short circuit' 동작을 얻을 수 있어야합니다. – cha
내 [이 답변] (http://stackoverflow.com/questions/22978759/handling-select-condition-dynamically/22978868#22978868) 읽기 사례 – cha
@cha의 사용 예 : 첫 번째 코드 예제가 예상대로 작동 함을 확신합니다. 나는 이것을 발명하지는 않았지만 얼마 동안 그것을 사용했고 실행 계획은 예상 된 행동을 증명한다. 두 번째 코드 예제도 작동하지만 실행 계획은 하위 쿼리가 아직 실행되고 있음을 보여줍니다. – eric