2016-01-21 3 views
0

Я использую ANSI_NULLS для ON. Мне нужно обновить мой запрос, чтобы позволить параметру передать нулевое значение. Запрос, который у меня ниже, имеет оператор CASE в JOIN. SQL Server не нравится синтаксис.Как структурировать SQL-запрос, чтобы разрешить NULL

мне нужно иметь JOIN искать значения NULL, если параметр @MyColumn является NULL или искать значение, которое было передано. С ANSI_NULLS набором для ON, я не могу просто установить MyColumn = @MyColumn так NULL приравнивает к НИЧЕГО. Я знаю, что мне нужно использовать синтаксис IS NULL.

Как правильно отформатировать этот запрос, чтобы получить ожидаемые результаты?

SET ANSI_NULLS ON 
GO 

CREATE PROCEDURE MySampleProc 
    @MyColumn INT 
AS 
    SELECT 
     t2.MyColumn  
    FROM 
     Table1 t1 
    JOIN 
     Table2 t2 ON t2.Table2PK = t1.Table2FK 
        AND CASE 
          WHEN @MyColumn IS NULL THEN MyColumn IS NULL 
          ELSE MyColumn = @MyColumn 
         END 

ответ

3

Попробуйте это ...

SELECT 
    t2.MyColumn  
FROM Table1 t1 
JOIN Table2 t2 ON t2.Table2PK = t1.Table2FK AND 
    ((@MyColumn IS NULL AND MyColumn IS NULL) OR MyColumn = @MyColumn) 
Смежные вопросы