我正在使用sql server 2005并使用由其他人编写的旧存储过程。我只是想调用存储过程来获取数据而不是修改它。
问题是存储过程返回多个具有完全相同字段的结果集。只是数据有点不同。因此,当在前端调用存储过程时,它被用于填充两个不同的数据表,这很好。
但是现在我需要在excel中使用组合结果,因此不具备多个数据表的优点。
基本上我想创建一个新的存储过程,只需调用现有的storedproc即可返回两个结果的并集。我不想创建存储过程的另一个副本,因为每当其他存储过程被更改时我将不得不保留标签我将不得不改变我的。
有没有办法在sql server本身访问第二个结果集。
谢谢,
- ABHI
答案 0 :(得分:3)
创建一个代理程序,将两个集合抛出到临时表中,并从中进行选择。
这是一个测试示例......
/*Create first proc that returns two data sets*/
IF OBJECT_ID('ReturningTwoDataSets') IS NOT NULL
BEGIN
DROP PROCEDURE ReturningTwoDataSets
END
GO
CREATE PROCEDURE dbo.ReturningTwoDataSets
AS
BEGIN
SET NOCOUNT ON
SELECT '1' AS [col1]
,'2' AS [col2]
,'3' AS [col3]
SELECT '4' AS [col1]
,'5' AS [col2]
,'6' AS [col3]
END
GO
/*
Create new proc that combines both data sets
into a temp table and returns a single dataset
*/
IF OBJECT_ID('ReturningOneDataSet') IS NOT NULL
BEGIN
DROP PROCEDURE ReturningOneDataSet
END
GO
CREATE PROCEDURE dbo.ReturningOneDataSet
AS
BEGIN
SET NOCOUNT ON
IF OBJECT_ID('TempDB..#OneDataSet') IS NOT NULL
BEGIN
DROP TABLE #OneDataSet
END
CREATE TABLE #OneDataSet
(
[col1] VARCHAR(100)
,[col2] VARCHAR(100)
,[col3] VARCHAR(100)
)
INSERT INTO #OneDataSet
(
col1
,col2
,col3
)
EXEC ReturningTwoDataSets
SELECT * FROM #OneDataSet
END
GO
/*Execute the old proc*/
EXEC ReturningTwoDataSets
/*Execute the new proc*/
EXEC ReturningOneDataSet