我想从多个存储过程中插入数据。
Trial_Format_sp
会返回2列,FieldA
和FieldB
,但我想添加另一列来指示公司数据来自。
这是我的代码而且无法正常工作
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
谢谢。
答案 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;