【发布时间】:2014-05-07 13:55:54
【问题描述】:
我有一个现有的存储过程,它本质上返回两个表,第一个表只是未命名列中的一个整数,第二个表有命名列的行。
我需要构建一个新的存储过程来执行现有存储过程并使用现有存储过程返回的第二个表中的数据,并忽略第一个表/整数。
以下是我的尝试,但由于第一个表/整数,它返回错误“列名或提供的值的数量与表定义不匹配”。
CREATE PROCEDURE [dbo].[New_StoredProcedure]
AS
BEGIN
CREATE TABLE #temptable(X VARCHAR(20), Y INT, Z VARCHAR(100))
INSERT INTO #temptable(X, Y, Z)
EXEC [Existing_StoredProcedure]
@a = '1',
@b = '2',
@c = '3'
SELECT * FROM #temptable
DROP TABLE #temptable
END
有没有办法写这个忽略第一个表/整数?
【问题讨论】:
-
不,没有解决方法。请参阅
INSERT:“如果 execute_statement 与 INSERT 一起使用,则每个结果集必须与 table 或 column_list 中的列兼容。”没有如果、但是或例外,只有那句话。 -
没有 T-SQL 方法可以读取第二个或更多结果集。但是可以使用SQLCLR extended procedure。
-
[Existing_StoredProcedure]的输出是否存储在 temp、global temp 或 perm 表中? -
或者您可以在存储过程中添加一个附加参数来控制返回哪个结果集,然后在运行时通过将值传递给该参数来决定返回什么结果集。
-
看起来侵入性最小的方法是从我的 .NET 源代码中调用现有的存储过程并获取返回的第二个表,然后从我的新存储中获取结果过程,然后在代码隐藏中进行我的数据操作和合并。
标签: sql sql-server stored-procedures