2016-01-21 37 views
0

我正在使用ANSI_NULLS設置爲ON。我需要更新我的查詢以允許參數傳遞一個空值。下面的查詢在JOIN中有CASE聲明。 SQL Server不喜歡語法。如何構建SQL查詢以允許空值

我需要有JOIN看空值,如果@MyColumn參數是NULL,或者尋找中傳遞的價值。隨着ANSI_NULLS設置爲ON,我不能只是簡單地設置MyColumn = @MyColumn因爲NULL相當於NOTHING。我知道我需要使用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)