2012-03-12 63 views
1

我有一個SSRS數據源,我想在SQL Server中進行測試,以便可以看到確切的結果集。我使用利用被傳遞到查詢中的條款在報告中多值參數的報告在TSQL中重新創建SSRS數據源進行測試

AND T.OrderType IN (@OrderType) 

我想這樣做是在SQL語句的頂部聲明變量在這裏被引用。這是我嘗試過的方法的例子,沒有工作

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

然而,這並沒有產生

我可以創建變量(沒有記錄返回)所期望的結果,並將它成功返回行爲單一類型,但通常我想在測試數據源時看到與在SSRS中相同的行爲。以下是成功返回單個訂單類型

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

回答

1

基本上只是希望你WHERE條款看起來像這樣的代碼: WHERE T.OrderType IN ('StringValue1','StringValue2',StringValue3')。 如果將SSRS參數轉換爲以逗號分隔的列表並使用表變量,則可以輕鬆完成此操作。

首先,在SSRS報告中的數據集屬性中,可以使用將param的值轉換爲以逗號分隔的多個字符串的表達式來修改該參數:=Join(Parameters!OrderType.Value,",")

要在您的測試腳本中模擬此行爲:SET @OrderType = 'String1, String2, String3'

接下來,使用UDF將@OrderType的內容轉換爲表格變量,該UDF將逗號分隔列表解析爲變量。您應該能夠在網上找到這種類型的功能的很多例子。

一旦您填充了表變量(我們將其稱爲@tblOrderType),您可以使用WHERE子句,如下所示:T.OrderType IN (SELECT OrderType FROM @OrderType)

+0

目標是讓一個帶有變量的WHERE子句,如AND T.orderType IN(@OrderType)。當我嘗試用一​​個字符串中的StringValues構建一個VARCHAR(255)變量時,它將返回任何結果。 – David 2012-03-12 20:03:57

+0

重新思考這個問題,最好設置你的測試變量,如下所示:SET'@OrderType ='String1,String2,String3''。然後將'@ OrderType'中的值轉儲到表變量中。我將編輯我的答案來說明這一點。 – 2012-03-13 15:20:38

0

創建以下功能。

CREATE FUNCTION [DBO]。[拆分]( @InputString爲nvarchar(最大), @Delimiter爲nvarchar(50) )

RETURNS @items TABLE( 項目爲nvarchar(最大) )

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

使用從表名WHERE和T.OrderType在存儲過程中

SELECT * SELECT語句(SELECT * FROM DBO。拆分(@OrderType,','))

相關問題