在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规范中的东西,我希望有一天他们会支持它?
答案 0 :(得分:10)
存储过程可以返回许多结果集,也可以不返回任何结果集,并且它可以完全根据存储过程的执行而变化。
编译时,它的元信息并未将其描述为具有任何特定的可预期结果集输出。
我希望考虑到这些限制,他们选择不执行此操作,因为缺少对存储过程可能返回的强类型。
答案 1 :(得分:0)
不是来自sproc,但你可以使用tabled values函数来做类似的事情。
Select * From fnMyFunction
如果需要,您可以插入#表。
答案 2 :(得分: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
答案 3 :(得分: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