2016-01-21 36 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)