我正在使用SQL Server 2008 R2,并试图将存储过程的结果导入临时表中,以便稍后在调用存储过程中访问。我的TSQL如下:无法将存储过程的结果导入#TempTable工作
CREATE PROCEDURE sp_ToBeCalled AS
(
@SomeParam INT
)
BEGIN
SELECT * FROM tblSomeTable WHERE SomeField = @SomeParam
END
CREATE PROCEDURE sp_CallingProcedure AS
(
@SomeOtherParam INT
)
BEGIN
-- A
SELECT * INTO #MyTempTable FROM sp_ToBeCalled(@SomeOtherParam)
-- B
SELECT * FROM #MyTempTable FOR XML RAW
END
这一切编译罚款但是当我打电话sp_CallingProcedure声明 - B返回一个错误#MyTempTable。
我该如何做“A”,以便我可以从#MyTempTable表中访问其结果,而无需首先声明#MyTempTable的结构?
我正在寻找可以一般使用的解决方案。我有一些现有的存储过程,我需要从不同的调用者调用获取结果可查询的必要性。我无法更改现有的存储过程。
我不想使用
OPENQUOERY()
- 需要自定义链接服务器定义sp_ExecSql()
- 意味着我必须建立动态SQL不给我SP编译时检查。
你可能要考虑表值函数以及 – Sparky 2013-04-29 22:29:16
你可以使用OPENROWSET来代替OPENQUERY以避免链接服务器定义。我试图让MS实现一个EXECUTE INTO,但他们关闭,因为不会修复。 https://connect.microsoft.com/SQLServer/feedback/details/675710/execute-into-to-capture-execute-results-in-a-new-table – GilM 2013-04-29 22:37:46