我需要一些当然不起作用的东西。
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一样。
答案 0 :(得分:7)
您可以使用临时表作为中间人:
insert into #TempTable exec MySP
insert into Table1 (id, value) select id, value from #TempTable
答案 1 :(得分:1)
您可以通过将存储过程中的插入插入临时表中来分两步解决问题,然后执行插入操作,从临时表中选择所需的列。
答案 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
一旦语句完成执行,临时视图就会消失