我的问题是:
我有三个表....前两个表的id
为IDENTITY
...我需要获取第二个表中第一个表的id
然后我需要获得第3和第2表中的id
.....我能够将第一张表的id
放到第2张表中
但是我无法将第二个表的id
放到第三个表中...........我正在使用WCF SQL适配器来使用存储过程并且我的存储过程看起来像此
CREATE Procedure [dbo].[InsertHeader]
(
@parHeader As Header READONLY,
@parHeader_Details As HeaderDetails READONLY,
@parHeader_Details1 As HeaderDetails1 READONLY
)
AS
SET NOCOUNT ON
BEGIN
DECLARE @id int, @id1 int
INSERT INTO EDI834_5010_Header([File_Name_EDI834], [ST01], [ST02], [ST03],
[BGN01__TransactionSetPurposeCode],
[BGN02__TransactionSetIdentifierCode],
[BGN03__TransactionSetCreationDate],
[BGN04__TransactionSetCreationTime],
[BGN08__ActionCode], [SE01], [SE02])
SELECT
[File_Name_EDI834], [ST01], [ST02], [ST03],
[BGN01__TransactionSetPurposeCode], [BGN02__TransactionSetIdentifierCode],
[BGN03__TransactionSetCreationDate], [BGN04__TransactionSetCreationTime],
[BGN08__ActionCode], [SE01], [SE02]
FROM @parHeader;
SET @id = @@IDENTITY;
INSERT INTO EDI834_5010_2000([Header_Id], [INS01__InsuredIndicator],
[INS02__IndividualRelationshipCode],
[INS03__MaintenanceTypeCode],
[INS04__MaintenanceReasonCode],
[INS05__BenefitStatusCode])
SELECT @id, [INS01__InsuredIndicator], [INS02__IndividualRelationshipCode],
[INS03__MaintenanceTypeCode], [INS04__MaintenanceReasonCode],
[INS05__BenefitStatusCode]
FROM @parHeader_Details;
SET @id1 = @@IDENTITY;
INSERT INTO EDI834_5010_2300Loop([Id_Header_Id], [Id_Loop2000],
[HD01_MaintenanceTypeCode], [HD03_InsuranceLineCode],
[HD04_PlanCoverageDescription])
SELECT @id, @id1,
HD01_MaintenanceTypeCode, HD03_InsuranceLineCode,
HD04_PlanCoverageDescription
FROM @parHeader_Details1;
RETURN @id1;
END
我需要在存储过程中更改以将第二个表的id
变为第三个.......在xml中有很多循环因此我需要在第三个中获取相应的ID表
我的数据看起来像这样
<Header details>
<Header_Details1> data </Header_Details>
<Header_Details1> data </Header_Details>
<Header_Details1> data </Header_Details>
<Header_details>
<Header details>
<Header_Details1> data </Header_Details>
<Header_Details1> data </Header_Details>
<Header_Details1> data </Header_Details>
<Header_details>
答案 0 :(得分:0)
好吧,你的主要问题是:你不只是插入一行 - 而是一大堆行!
所以虽然您可以使用@@IDENTITY
来获取最后插入的身份值(顺便说一句:我建议使用SCOPE_IDENTITY()
代替 - see here as for why) - 这将仅单排工作!
您需要的是一种输出多个插入身份的机制 - use the OUTPUT clause:
DECLARE @InsertedIDs TABLE (ID1 INT, ID2 INT)
INSERT INTO EDI834_5010_Header(......)
OUTPUT Inserted.ID INTO @InsertedIDs(ID1)
SELECT
.......
FROM @parHeader;
对于第一个语句,这会将所有插入的标识值输出到表变量@InsertedIDs
。
现在您的第二个表 - 是否有任何列可以将第一个和第二个插入的ID关联起来?您需要将插入的标识值从第二个INSERT
捕获到同一个表变量中,但您需要知道哪个ID1
与ID2
相关联 - 我坦率地说看看你的陈述会怎么做......
但最后,您将拥有一个包含n行(ID1, ID2)
的表变量,然后您可以使用它来插入第三个表。