从存储过程插入表选择结果集但列数不相同

时间:2010-08-19 19:06:05

标签: sql sql-server-2005 tsql plsql

我需要一些当然不起作用的东西。

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工作。

有没有办法不在临时表中定义表格结构(所有具有数据类型和长度的列)?就像CTE一样。

4 个答案:

答案 0 :(得分:7)

您可以使用临时表作为中间人:

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

答案 1 :(得分:1)

您可以通过将存储过程中的插入插入临时表中来分两步解决问题,然后执行插入操作,从临时表中选择所需的列。

有关临时表的信息:http://www.sqlteam.com/article/temporary-tables

答案 2 :(得分:0)

- 嗯,声明临时表或表变量,具体取决于预期的行数 - 来自SP。该表基本上是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;

答案 3 :(得分:-1)

您不需要创建临时表,您可以通过创建这样的临时视图来执行单个查询

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

一旦语句完成执行,临时视图就会消失