【发布时间】:2013-04-23 17:08:30
【问题描述】:
我正在使用 SQL Server 2008 R2 并试图将存储过程的结果放入一个临时表中,稍后我可以在调用存储过程中访问该表。我的TSQL如下:
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 编译时间检查。
【问题讨论】:
-
您可能还需要考虑表值函数
-
您可以使用 OPENROWSET 而不是 OPENQUERY 来避免链接服务器定义。我试图让 MS 实施 EXECUTE INTO,但他们以 Won't Fix 的形式关闭。 connect.microsoft.com/SQLServer/feedback/details/675710/…
标签: sql-server-2008 tsql