将Table参数插入存储过程中的2个不同表

时间:2015-07-07 13:00:14

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

我在存储过程中有一个表值参数@supplierData,其中包含以下列

sName | sLocation | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt
----------
XXX   | USA       | 1000         | 2000         | 1000         | 2050
YYY   | U.K       | 8000         | 12000        | 10000        | 29000

该表需要插入以下2个表

SUPPLIER表:

sId        | sName | sLocation |
(Identity) |       |           |
----------
 1         | XXX   | USA       |
 2         | YYY   | U.K       |

SUPPLIERRECORD表:

YearId | sId | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt|
----------
 1     | 1   | 1000         | 2000         | 1000         | 2050        |
 2     | 2   | 8000         | 12000        | 10000        | 29000       |

第二个表中的位置引用了作为同一存储过程执行的一部分创建的sId

我应该从@supplierData参数中按记录插入记录吗?

3 个答案:

答案 0 :(得分:1)

您可以将DENSE_RANK函数(https://msdn.microsoft.com/en-us/library/ms173825.aspx)与OVER一起使用来指定顺序和分区条件。因此,您将获得供应商的数字ID。您可以先将它们插入到表参数中,然后将其用于两个INSERT

答案 1 :(得分:0)

你在这里。让我们使用insert into selectselect into来创建它们:

DECLARE @supplierData TABLE
(
  sName nvarchar(50),
  sLocation nvarchar(50),
  currYearExpt int,
  currYearImpt int,
  prevYearExpt int,
  prevYearImpt int
);

DECLARE @SUPPLIER TABLE
(
  sId int,
  sName nvarchar(50),
  sLocation nvarchar(50)
);
insert into @SUPPLIER values(1,'XXX','USA');
insert into @SUPPLIER values(2,'YYY','U.K');

DECLARE @SUPPLIERRECORD TABLE
(
  YearId int,
  sId int,
  currYearExpt int,
  currYearImpt int,
  prevYearExpt int,
  prevYearImpt int
);
insert into @SUPPLIERRECORD values(1,1,1000,2000,1000,2050);     
insert into @SUPPLIERRECORD values(2,2,8000,12000,10000,29000);

insert into @supplierData
select a.sName, a.sLocation, b.currYearExpt, b.currYearImpt, b.prevYearExpt, b.prevYearImpt
from @SUPPLIER a inner join @SUPPLIERRECORD b on a.sId = b.sId

select * from @supplierData

希望这有帮助。

答案 2 :(得分:0)

是的,您可以使用insert into .. select from构建如下

insert into SUPPLIER(sName , sLocation)
select sName , sLocation 
from @supplierData;

insert into SUPPLIERRECORD (currYearExpt , currYearImpt , prevYearExpt , prevYearImpt)
select currYearExpt , currYearImpt , prevYearExpt , prevYearImpt
from @supplierData;