2012-03-12 11 views
1

私は正確な結果セットを見ることができるようにSQL ServerでテストしたいSSRSデータソースを持っています。私はテストのためにTSQLのSSRSデータソースを再作成

AND T.OrderType IN (@OrderType) 

句としてクエリに渡されたレポートに複数値のパラメータの作るの使用を使用しています私は何をしたいことを宣言するためにSQLにおける文の一番上にあることを報告ここで参照される変数。これは、しかし

DECLARE @OrderType VARCHAR(255); SET @OrderType = '''StringValue1'',''StringValue2'''; 

を動作しませんでした私が試したのアプローチの一例であり、これは、私は、変数を作成することができます

(レコードが返されなかった)は、所望の結果を生み出すことができなかったし、それが正常に返してきましたSSRSの場合と同じように、データソースをテストするときと同じ動作を見たいと思っています。 WHERE T.OrderType IN ('StringValue1','StringValue2',StringValue3'):以下首尾シングルオーダータイプ

DECLARE @OrderType VARCHAR(255); SET @OrderType = 'StringValue1'; 

答えて

1

あなたは、本質的に、あなたのWHERE句は次のようになりたいを返すコードです。 これは、SSRSパラメータをコンマ区切りリストに変換してテーブル変数を使用すると簡単に実行できます。

最初に、SSRSレポートのデータセットプロパティで、パラメータを、カンマで区切られた複数の文字列に変換する式で変更できます。=Join(Parameters!OrderType.Value,",")

テストスクリプトでこの動作を模倣する:SET @OrderType = 'String1, String2, String3'

次に、@OrderTypeの内容を、コンマ区切りのリストを変数に解析するUDFを使用してテーブル変数に変換します。このタイプの関数の多くの例をWeb上で見つけることができるはずです。

テーブル変数が移入されると(@tblOrderTypeと呼ばれます)、WHERE句をT.OrderType IN (SELECT OrderType FROM @OrderType)のように使用できます。

+0

目的は、AND T.orderType IN(@OrderType)などの変数にWHERE句を渡すことです。 1つの文字列にStringValuesを指定してVARCHAR(255)変数を作成しようとすると、コンマが区切られて結果が返されません。 – David

+0

これを再考するには、SET '@OrderType = 'String1、String2、String3''のようにテスト変数を設定するのが最善でしょう。 @ValidType'の値をテーブル変数にダンプします。私はこれを説明するために私の答えを編集します。 –

0

以下の関数を作成します。

CREATE FUNCTION [DBO]。[スプリット]( @InputStringのNVARCHAR(MAX)、 @DelimiterのNVARCHAR(50) )

RETURNS @Items表( アイテムNVARCHAR(MAX) )

AS BEGIN IF @Delimiter = '' BEGIN SET @Delimiter = '' SETは@InputString = REPLACE(@InputString、 ''、@Delimiter) END

IF (@Delimiter IS NULL OR @Delimiter = '') 
     SET @Delimiter = ',' 


    DECLARE @Item     nvarchar(max) 
    DECLARE @ItemList  nvarchar(max) 
    DECLARE @DelimIndex  INT 

    SET @ItemList = @InputString 
    SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0) 
    WHILE (@DelimIndex != 0) 
    BEGIN 
     SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex) 
     INSERT INTO @Items VALUES (@Item) 

     SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+LEN(@Delimiter), LEN(@ItemList)[email protected]) 
     SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0) 
    END -- End WHILE 

    IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString 
    BEGIN 
     SET @Item = @ItemList 
     INSERT INTO @Items VALUES (@Item) 
    END 

    -- No delimiters were encountered in @InputString, so just return @InputString 
    ELSE INSERT INTO @Items VALUES (@InputString) 

    RETURN 

ENDストアドプロシージャ

DBOから*を選択し、T.OrderType IN(テーブル名SELECT * FROMで

使用このselect文を。

関連する問題