안녕하세요
늦었지만 새해 복 많이 받으십시오 ^^
프로시져 작성중 궁금증이 있어서 고수님들의 도움을 청합니다
프로시져에 변수가 하나 있습니다
DECLARE @Test AS NVARCHAR(20)
그리고 SELECT 쿼리가 하나 있습니다
SELECT [Test], [Test2]
FROM
TB_EXAM
WHERE
[Test] = @Test
여기서 질문이 있는데요
@Test라는 변수에 NULL이 들어갈 경우도 있습니다
(1) 그러면 아래와 같이 WHERE 절을 한문장으로 처리 하거나
WHERE
ISNULL( [Test],'') = ISNULL(@Test,'')
(2) 아니면 @Test가 NULL일 경우와 아닐 경우를 IF문으로 구분을 두어서 쿼리를 두개 만들어야 할 것 같은데요
IF @Test IS NULL BEGIN
SELECT [Test], [Test2]
FROM
TB_EXAM
WHERE
[Test] IS NULL
END
ELSE BEGIN
SELECT [Test], [Test2]
FROM
TB_EXAM
WHERE
[Test] = @Test
END
근데 제가 알기로 (1)번처럼 WHERE의 좌변을 건들면, 쿼리의 속도저하가 일어난다고 알고 있습니다
좌변을 건들지 않고 굳이 (2)번처럼 IF문을 쓰지 않고 더 심플하게 할 수 있는 방법이 있을까 해서 문의를 드립니다.
읽어 주셔서 감사합니다
SET ANSI_NULLS OFF
select *
from TB_EXAM
where [Test] in (@Test, NULL)
근데 위처럼 하니 실행계획이 좀 틀려지네요.
왜일치 ㅎㅎ