SQL Server:将存储过程结果集放入表变量中,而不指定其模式

时间:2011-08-30 16:09:04

标签: sql-server tsql sql-server-2008

我有一个包含许多参数的存储过程。

我想插入(或者选择)像这样:

INSERT INTO @TEMP_TABLE
    EXECUTE STORED_PROCEDURE

没有定义@TEMP_TABLE

的架构

6 个答案:

答案 0 :(得分:21)

例如:

declare @temptable2 as table
(
 DatabaseName nvarchar(128),
 dbsize nvarchar(128),
 owner varchar(128),
 dbid nvarchar(128),
 created nvarchar(128),
 status nvarchar(128),
 compatibility_level nvarchar(128)
)

INSERT INTO @temptable2
EXEC ('sp_helpdb')

答案 1 :(得分:5)

您不能使用@tablevariable

执行此操作

the link posted by Joe中的解决方法使用SELECT ... INTO

表变量当前不支持这种情况(并且不会来自对this connect item的响应)因为表变量的模式需要在编译时知道。

答案 2 :(得分:5)

实现这一目标的唯一方法是使用SELECT INTO #temp表的一个棘手的解决方法,这将比它的价值更麻烦。

只需使用所需的列对表变量进行编码。然后在两个存储过程中添加一个非常明显的,位置很好的注释,提醒编码器这个依赖关系,然后继续进行其他工作。

答案 3 :(得分:1)

Via: 1.1 Chrome-Compression-Proxy

答案 4 :(得分:0)

这个@skorpk的回答实际上对我提出的问题就像问题的正确答案一样。实际上,您可以插入表变量,因为问题似乎表明。此外,您还可以使用存储过程来执行此操作 期待参数。请参阅以下示例代码:

这个答案实际上对我提出了问题的正确答案。实际上,您可以插入表变量,因为问题似乎表明。此外,您还可以使用存储过程来执行此操作 期待参数。请参阅以下示例代码:

/*Create stored procedure for this example.       */
/*It will simulate results and we can clean it up */
/*later in this example                           */
create proc sproc_get_friends (@context_user_id int)
as
             select @context_user_id as id, 'me' as name
   union all select 1234678910 as id, 'Jane Doe' as name
   union all select 1112131415 as id, 'John Doe' as name
go

/*Create temp variable*/
declare @tmp as table ( friend_user_id int, friend_name nvarchar(100) )

/*Insert into temp variable from stored procedure*/
INSERT INTO @tmp exec  ('sproc_get_friends 10000')

/*Show data in temp variable*/
select * from @tmp
go

---Clean up
drop proc sproc_get_friends
go

答案 5 :(得分:-5)

你有什么问题? @TEMP_TABLE是表类型。它不需要架构