Sql server 在SSRS 2010中,将数据集中的字段用作另一个数据集参数的值

Sql server 在SSRS 2010中,将数据集中的字段用作另一个数据集参数的值,sql-server,reporting-services,parameters,sql-server-data-tools,Sql Server,Reporting Services,Parameters,Sql Server Data Tools,我有一份SSRS报告,它使用了多个数据集,我们称它们为D1和D2 D2是具有一个参数的sp。目标是将单个列中的值从D1传递到D2参数 用户定义的拆分函数使我能够在单个参数中使用多个值运行SP。e、 g exec MyStoredProc '12345,6789,77891,3423498' 我只需要用逗号连接D1中的值 使用默认值>从查询中获取值>D1>字段1 仅拾取第一个值,而不是所有值 有什么建议吗?我认为,在D1中使用STUFF创建新的领域将使您实现您想要的目标: 以下是一个例子: CR

我有一份SSRS报告,它使用了多个数据集,我们称它们为D1和D2

D2是具有一个参数的sp。目标是将单个列中的值从D1传递到D2参数

用户定义的拆分函数使我能够在单个参数中使用多个值运行SP。e、 g

exec MyStoredProc '12345,6789,77891,3423498'
我只需要用逗号连接D1中的值

使用默认值>从查询中获取值>D1>字段1 仅拾取第一个值,而不是所有值


有什么建议吗?

我认为,在D1中使用STUFF创建新的领域将使您实现您想要的目标:

以下是一个例子:

CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)

INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)


select * from #YourTable

SELECT 
  [ID],
  STUFF((
            SELECT ', ' + [Name] + ': ' + Cast([Value] as varchar(10)) FROM #YourTable 
            FOR XML PATH('')),1,1,''
        ) AS NameValues
FROM #YourTable Results
GROUP BY ID
go

-- Drop #YourTable
您也可以使用STRING_AGG,即


那么,为什么不直接更改D1 sql代码以返回值的串联列表而不是行呢。网上有很多这样做的例子。例如,我也想到了这一点,它有点脏,因为D1可能有数百行……难道没有其他方法吗?数百行不是问题,它只是几个KB的字符串。如果D1和D2都使用相同的sql server,并且数据量很大,则还可以使用物理表或临时表在D1中插入并在D2中读取数据来传递所需的任何内容。在多个用户的情况下,只需将一些唯一的int值从D1传递到D2,这样就可以区分传递的数据。或者,如果D2完全依赖于D1,则将两个数据集合并为一个。
SELECT 
    STRING_AGG ([Value], ', ')
FROM #YourTable Results