3

在 SQL Server 中,无法根据存储过程的结果动态创建临时表,ala:

CREATE TABLE #temptable AS
EXEC spMyStoredProc

或者

EXEC spMyStoredProc INTO #temptable

或类似的东西。相反,您必须事先了解 SP 布局,并且必须执行以下操作:

CREATE TABLE #temptable (col1 INT, col2 VARCHAR(255))

INSERT INTO #temptable
EXEC spMyStoredProc

有这种情况的功能原因吗?也许是 SQL Server 的限制?或者它只是尚未添加到 SQL 规范中的东西,我可以希望有一天他们会支持它?

4

4 回答 4

10

存储过程可以返回许多结果集,也可以不返回,并且它可以完全取决于存储过程的执行。

当它被编译时,它的元信息并没有将它描述为具有任何特定的预期结果集输出。

我希望考虑到这些限制,他们选择不实现这一点,因为存储过程可能返回的内容缺乏强类型。

于 2009-07-16T15:38:26.740 回答
0

不是来自存储过程,但您可以使用表值函数来做类似的事情。

Select * From fnMyFunction

如果需要,您可以插入到 # 表中。

于 2009-07-16T15:38:09.940 回答
0

试试这个

DECLARE @temptable TABLE (ID INT, NAME VARCHAR(255))

declare @query varchar(max)

set @query='Select whatever from whereever'

INSERT INTO @temptable

EXEC (@Query)

select *from @temptable
于 2009-07-16T15:40:22.057 回答
0

如果我需要这样的功能,我会使用内联 UDF,如下所示:

CREATE PROCEDURE MySample
AS
SELECT a,b,c FROM dbo.MyInlineUDF(1,2,3)
GO

SELECT * INTO #t
FROM dbo.MyInlineUDF(1,2,3) WHERE 1=0

INSERT INTO #t EXEC MySample
于 2009-07-16T16:25:49.157 回答