将 Table 参数插入存储过程中的 2 个不同表
Insert Table parameter to 2 different tables within a stored procedure
我在存储过程中有一个 table 值参数 @supplierData
,它具有如下列
sName | sLocation | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt
----------
XXX | USA | 1000 | 2000 | 1000 | 2050
YYY | U.K | 8000 | 12000 | 10000 | 29000
table需要插入到下面2tables
SUPPLIER
table:
sId | sName | sLocation |
(Identity) | | |
----------
1 | XXX | USA |
2 | YYY | U.K |
和
SUPPLIERRECORD
table:
YearId | sId | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt|
----------
1 | 1 | 1000 | 2000 | 1000 | 2050 |
2 | 2 | 8000 | 12000 | 10000 | 29000 |
第二个 table 引用了作为同一存储过程执行的一部分创建的 sId
。
我应该从 @supplierData
参数逐条插入记录吗?
给你。让我们使用 insert into select
或 select 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
希望对您有所帮助。
是的,您可以使用 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;
您可以使用带有 OVER 的 DENSE_RANK 函数 (https://msdn.microsoft.com/en-us/library/ms173825.aspx) 来指定顺序和分区标准。因此,您将获得供应商的数字 ID。您可以先将它们插入 table 参数,然后将其用于您的两个 INSERT
我在存储过程中有一个 table 值参数 @supplierData
,它具有如下列
sName | sLocation | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt
----------
XXX | USA | 1000 | 2000 | 1000 | 2050
YYY | U.K | 8000 | 12000 | 10000 | 29000
table需要插入到下面2tables
SUPPLIER
table:
sId | sName | sLocation |
(Identity) | | |
----------
1 | XXX | USA |
2 | YYY | U.K |
和
SUPPLIERRECORD
table:
YearId | sId | currYearExpt | currYearImpt | prevYearExpt | prevYearImpt|
----------
1 | 1 | 1000 | 2000 | 1000 | 2050 |
2 | 2 | 8000 | 12000 | 10000 | 29000 |
第二个 table 引用了作为同一存储过程执行的一部分创建的 sId
。
我应该从 @supplierData
参数逐条插入记录吗?
给你。让我们使用 insert into select
或 select 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
希望对您有所帮助。
是的,您可以使用 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;
您可以使用带有 OVER 的 DENSE_RANK 函数 (https://msdn.microsoft.com/en-us/library/ms173825.aspx) 来指定顺序和分区标准。因此,您将获得供应商的数字 ID。您可以先将它们插入 table 参数,然后将其用于您的两个 INSERT