複数の表の相関

I was trying to extend the above link http://blogs.msdn.com/b/biztalkcpr/archive/2009/10/05/inserting-parent-child-records-with-identity-column-using-wcf-sql-adapter-in-one-transaction.aspx#comments

私の問題は次のとおりです。

私は3つのテーブルを持っています....最初の2つのテーブルは IDENTITY として id を持っています。 2番目のテーブル

3番目のテーブルの1番目と2番目のテーブルの id を取得する必要があります。最初のテーブルの id を2番目のテーブルに取得できました

しかし、2番目のテーブルの id を3番目のテーブルに入れることができません。... 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

2番目のテーブルの id を3番目に取得するためにストアドプロシージャ内で変更する必要があるものは何ですか?xmlには非常に多くのループがあるので、3番目に適切なIDを取得する必要があります表

私のデータはこのように見えます

 
data data data
data data data

0
StackOverflowへようこそ:コード、XML、またはデータサンプルを投稿する場合は、テキストエディタでそれらの行を強調表示し、[コードサンプル]ボタン( {} )をクリックしてくださいエディタのツールバーをきれいにフォーマットし、構文を強調表示する!
追加された 著者 marc_s,
誰がこれらの表と列名?!?!?!?!?
追加された 著者 marc_s,
Hey mark_S :)列名と表名について837 X12files .....列はこのようなものです
追加された 著者 user1104946,
長い行を短い行に分割することも役に立ちます。たくさん。
追加された 著者 kol,

1 答え

まあ、あなたの主な問題は、あなたは単なる行を挿入するのではなく、行全体を挿入することです!

したがって、最後に挿入されたID値を取得するには @@ IDENTITY を使用できます(btw:代わりに SCOPE_IDENTITY()を使用することをおすすめします) - 理由はこちら) - これは単なる行為です。

必要なのは、複数のIDを出力するメカニズムです。 OUTPUT句を使用する

DECLARE @InsertedIDs TABLE (ID1 INT, ID2 INT)

INSERT INTO EDI834_5010_Header(......)
OUTPUT Inserted.ID INTO @InsertedIDs(ID1) 
SELECT  
   ....... 
FROM @parHeader;

最初のステートメントでは、挿入されたすべてのID値がテーブル変数 @InsertedIDs に出力されます。

あなたの2番目のテーブルのために - 最初に挿入されたIDと2番目に挿入されたIDを関連付けることができる列はありますか?挿入されたID値を2番目の INSERT から同じテーブル変数に取り込む必要がありますが、 ID2 - と私はかなり率直にあなたのステートメントで行われる方法を見ていない.....

しかし、最終的には、(ID1、ID2)行のテーブル変数を使用して、3番目のテーブルに挿入することができます。

0
追加された
@ user1104946:大きなテキストやXMLスニペットをコメントに投稿しないでください。代わりに、元の質問を編集して更新し、そこに情報を提供してください。ありがとうございます。
追加された 著者 marc_s,
私のデータは次のようになります。
data data データ データ
追加された 著者 user1104946,