使用多个存储过程将数据插入表中

时间:2015-02-11 02:16:08

标签: sql sql-server sql-server-2008 stored-procedures

我想从多个存储过程中插入数据。

Trial_Format_sp会返回2列,FieldAFieldB,但我想添加另一列来指示公司数据来自。

这是我的代码而且无法正常工作

create table TB
(
    Company nvarchar(max) ,
    FieldA  nvarchar(max),
    FieldB  nvarchar(max)
)

insert into TB
"ComA" , exec DB1.dbo.Trial_Format_sp

insert into TB
"ComB" , exec DB2.dbo.Trial_Format_sp

谢谢。

1 个答案:

答案 0 :(得分:2)

您无法从EXEC中进行选择,至少在没有使用OPENQUERY的情况下也是如此。所以,如果你有这个设置,你可以尝试:

INSERT INTO TB (Company, FieldA, FieldB)
  SELECT "ComA", *
  FROM OPENQUERY(Local, 'exec DB1.dbo.Trial_Format_sp;');

INSERT INTO TB (Company, FieldA, FieldB)
  SELECT "ComB", *
  FROM OPENQUERY(Local, 'exec DB2.dbo.Trial_Format_sp;');

另一种选择是创建一个表变量来单独加载每个proc调用的结果,然后将这些结果与添加的列一起转储到真实表中。

例如:

DECLARE @TempResults TABLE
(
  FieldA   nvarchar(max),
  FieldB   nvarchar(max)
);

INSERT INTO @TempResults (FieldA, FieldB)
  EXEC DB1.dbo.Trial_Format_sp;

INSERT INTO TB (Company, FieldA, FieldB)
  SELECT "ComA", tmp.FieldA, tmp.FieldB
  FROM @TempResults tmp;

DELETE FROM @TempResults;

INSERT INTO @TempResults (FieldA, FieldB)
  EXEC DB2.dbo.Trial_Format_sp;

INSERT INTO TB (Company, FieldA, FieldB)
  SELECT "ComB", tmp.FieldA, tmp.FieldB
  FROM @TempResults tmp;