2012-10-30 94 views
0

我最近發佈了一個關於如何處理SQL Server Reporting Services中的NULL值的問題。問題位於Handle NULL values in SQL Server Reporting Services傳遞非空參數在SQL Server中返回NULL記錄

應用WHERE @MyParam=MyCol OR @MyParam IS NULL會面臨一個問題,即如果我選擇單個非空值(從下拉列表中並將其作爲SQL Server傳遞),這也會帶來NULL值記錄。它應該只帶來Non NULL值的記錄。

如果選擇非空記錄,應該如何避免空記錄?

回答

0

你所尋找的是一個異或(XOR):

-- Exclusive OR is an either/or combination which, 
-- using => as "is defined as" symbol, can be shown as: 
-- 
-- x XOR y => (x AND (NOT y)) OR ((NOT x) AND y) 

-- x => @MyParam = MyCol 
-- y => @MyParam IS NULL 



-- DECLARE @MyParam NVARCHAR(32) = 'MC1,MC2'; -- returns two lines 
-- DECLARE @MyParam NVARCHAR(32) = 'MC1';  -- returns one line 
    DECLARE @MyParam NVARCHAR(32) = NULL;  -- returns one line 


DECLARE @MyParamXML XML = N'<root><r>' + replace(@MyParam,',','</r><r>') + '</r></root>' 

;WITH SOExample AS 
(
    SELECT cast('MC1' AS NVARCHAR(12)) AS MyCol, 'Line 1' AS MyCol2 UNION ALL 
    SELECT  'MC2'       , 'Line 2'    UNION ALL 
    SELECT  NULL       , 'Line NULL' 
) 
SELECT * from SOExample 
WHERE 
     (@MyParam IS NULL  AND ISNULL(MyCol,'<NULL Value>') = '<NULL Value>') 
    OR (@MyParam IS NOT NULL AND 
     SOExample.MyCol IN 
      (SELECT SSRSlist.MyParams.value('.','NVARCHAR(32)') as MyParam 
      FROM @MyParamXML.nodes('//root/r') as SSRSlist(MyParams))) 
+0

這正確把所有非NULL值,但選擇空時,它不帶NULL values.It在帶來0行案件。 –

+0

我使用IN子句而不是'='使用MyCol時,因爲值是多下拉列表 –

+0

感謝您的輸入,但最終編輯也不會使用NULL值填充記錄。它對NON-NULL記錄非常有用。 –