2010-08-19 87 views
3

我需要类似当然不起作用的东西。从存储过程插入到表中选择结果集,但列数不同

insert into Table1 
(
    Id, 
    Value 
) 
select Id, value from 
(

    exec MySPReturning10Columns 

) 

我想从MySPReturning10Columns返回的结果集中填充Table1。这里SP返回10列,表格只有2列。

只要SP的表格和结果集具有相同的列数,但在我的情况下它们不相同,下面的方法工作。

INSERT INTO TableWith2Columns 
    EXEC usp_MySPReturning2Columns; 

此外,我想避免添加“。”。作为链接服务器只是为了使openquery和openrowset工作无论如何。

有没有在临时表中定义表strucutre的方法(所有列都有数据类型和长度)?像CTE一样。

+0

有没有办法在临时表中定义表结构(所有列都有数据类型和长度)?像CTE一样。 – Dave 2010-08-19 19:25:30

回答

7

你可以使用一个临时表作为中间人:

insert into #TempTable exec MySP 
insert into Table1 (id, value) select id, value from #TempTable 
-1

你不需要创建临时表,你可以通过创建临时视图这样

with tempView as EXEC MySPReturning10Columns insert into Table1 select id, value from tempView 

单查询做临时视图尽快消失该语句结束执行

+0

这可能是最好的解决方案,但我得到错误: Msg 156,级别15,状态1,行1 关键字'EXEC'附近的语法不正确。 – Dave 2010-08-19 20:12:17

+0

你使用哪个数据库? – Manivasagan 2010-08-20 04:46:31

+1

它看起来像是'临时视图',你的意思是CTE(公用表表达式)。这是行不通的 - CTE查询定义(http://technet.microsoft.com/en-us/library/ms175972(v=sql.105).aspx)必须符合与View相同的约束条件,即它必须是一个SELECT语句(http://technet.microsoft.com/en-us/library/ms187956.aspx)。 – 2013-09-26 14:58:06

0

- 好的,根据期望行数为 - 从SP中声明临时表或表var。这个表格将基本上是你的SP的结果集。

DECLARE @spResult AS TABLE 
(
    ID INT, 
    VALUE FLOAT, 
    .... 
); 

- 获取SP的结果集到临时表中。

INSERT @spResult EXEC STORED_PROC; 

- 现在您可以查询SP的ID和值的结果集;

INSERT Table1 (ID, VALUE) 
SELECT ID, VALUE FROM @spResult; 
+0

'CREATE'一个#temp表,或者'DECLARE'一个表@variable。 http://www.sqlteam.com/article/temporary-tables – mg1075 2013-03-07 13:43:16