这是问题所在。Sql Server从存储过程加入结果集
我有一个存储过程,将标准化数据转换为标准数据集。
我需要报告由视图组成的一些数据,以及来自存储过程的两个数据集,其中不同的参数被提交给返回不同列的存储过程。
例
如果我的观点包含类似:
ID Title Status Date
1 How To Party Like a rockstar Approved 7/15/1989
2 Too much of a good thing Approved 7/25/2001
3 Needs More Cowbell Denied 11/11/2011
4 Here Today Gone Tommorrow Approved 8/13/1969
5 The way She moves Approved 12/13/2011
并与一个paramater返回程序运行:
ID Do you like the ice Cream? How much would you pay for the ice cream?
1 Yes 2
2 Yes 5
3 Yes 7
4 No 2
5 No 3
并用不同的参数返回相同的程序运行:
ID Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 7 6 6
2 6 8 8
3 32 7 5
4 7 3 1
5 12 1 1
假设ID列是可用于连接数据集的关键,如何将我去得到:记住
ID Title Status Date Do you like the ice Cream? How much would you pay for the ice cream? Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 How To Party Like a rockstar Approved 7/15/1989 Yes 2 7 6 6
2 Too much of a good thing Approved 7/25/2001 Yes 5 6 8 8
3 Needs More Cowbell Denied 11/11/2011 Yes 7 32 7 5
4 Here Today Gone Tommorrow Approved 8/13/1969 No 2 7 3 1
5 The way She moves Approved 12/13/2011 No 3 12 1 1
饲养的存储过程不能直接插入SQL来完成,由于归一化的性质和归一化的转换,我不相信它们可以作为表变量udf来完成,因为存储过程根据传递给它的参数返回可变数量的列它运行(如果有人可以证明我错了这一点,并指向我的动态列表udf值,我会很感激)
如果我可以将视图和两个存储过程放入一个存储过程并以该方式返回数据集,那将是我的最终目标。
我还需要一提的是特设分布式查询无法打开此服务器上(不是我的决定)
分辨率
与斯图尔特安斯沃思的回答有点帮助,我的工作出来。我最初的问题是,每个交叉表的列都是动态的。这样的一个部分,我已经创建了返回的列作为一个逗号deliminated字符串函数...
DECLARE
@PivotColumns VARCHAR(MAX)
SET @PivotColumns = dbo.fnGetFormPivotColumns(9)
凡在这种情况下,9是一个让我知道我在为建设哪些项目参数。从那里,它只是一个在基本SP动态地建立临时表的功能重复,所以我想出了这个:
IF object_id('tempdb..#temp_DEP') IS NOT NULL
DROP TABLE #temp_DEP
CREATE TABLE #temp_DEP (APPLICATION_ID int)
EXEC ('ALTER TABLE #temp_DEP ADD ' + @PivotColumns)
INSERT INTO #temp_DEP
EXEC GetFormCrossTab 9
一个简单的SELECT * FROM #temp_DEP表明,我得到什么我想。
我所要做的就是重复其他参数的过程,并在同一个存储过程中获得两个数据集。
我想你会遇到的挑战是从PROC您的可变输出。 http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure如果它是一个一致的形状,你可以插入结果到一个表和混搭结果像这样。否则,我认为你正在寻找复制粘贴继承来将所有的逻辑组合在一起。 – billinkc
我应该很遗憾地添加Ad Hoc分布式查询已关闭,我将无法打开它,所以openrowset/opendatasource不是选项。 – Patrick