2012-03-12 27 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,','))

相关问题