我有一个过程Sp1
:
Begin
select product_id, product_name
from product
select dept_id, dept_name
from department
end
我的过程返回两个结果集,现在我使用以下命令在另一个过程中调用该过程:
exec SP1
如何通过此其他过程访问SP1
的结果?
答案 0 :(得分:2)
您可以使用INSERT INTO..EXEC
语法从 将SP中的结果获取到表中。但是,我不建议这样做,因为它依赖于从SP返回的所有数据集具有相同的定义:
USE Sandbox;
GO
CREATE PROC TestProc1 AS
SELECT *
FROM (VALUES(1,'T-Shirt'),
(2,'Jeans'),
(3,'Spotlight')) V(ProductID,ProductName);
SELECT *
FROM (VALUES(1,'Clothing'),
(2,'Lighting')) V(DeptID, DepartmentName);
GO
CREATE TABLE #TempTable (ID int, [Name] varchar(15));
INSERT INTO #TempTable
EXEC TestProc1;
SELECT *
FROM #TempTable;
GO
DROP TABLE #TempTable
DROP PROC TestProc1;
一旦抛出具有不同定义(例如,不同列数,或者可能无法隐式转换(即,将'abc'到int
的)值的数据集,会失败。例如:
USE Sandbox;
GO
CREATE PROC TestProc1 AS
SELECT *
FROM (VALUES(1,'T-Shirt',1),
(2,'Jeans',1),
(3,'Spotlight',2)) V(ProductID,ProductName,DeptID);
SELECT *
FROM (VALUES(1,'Clothing'),
(2,'Lighting')) V(DeptID, DepartmentName);
GO
CREATE TABLE #TempTable (ID int, [Name] varchar(15));
--fails
INSERT INTO #TempTable
EXEC TestProc1;
SELECT *
FROM #TempTable;
GO
DROP TABLE #TempTable;
GO
CREATE TABLE #TempTable (ID int, [Name] varchar(15),OtherID int);
--fails
INSERT INTO #TempTable
EXEC TestProc1;
SELECT *
FROM #TempTable;
GO
DROP TABLE #TempTable
DROP PROC TestProc1;
您实际上应该使用多个SP并以这种方式处理数据。