0

最近、SQL Server Reporting Services で NULL 値を処理する方法について質問を投稿しました。質問はSQL Server Reporting Services で NULL 値を処理するにあります。

適用するWHERE @MyParam=MyCol OR @MyParam IS NULLと問題が発生します。つまり、(ドロップダウン リストから) 単一の NON-NULL 値を選択し、これを SQL Server のように渡すと、NULL 値レコードも表示されます。非 NULL 値のレコードのみを取得する必要があります。

NON-NULL レコードが選択されている場合、NULL レコードを回避するにはどうすればよいですか?

4

1 に答える 1

0

探しているのは、排他的 OR (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)))
于 2012-10-30T10:00:28.817 に答える