0

の相関私は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を持っている...私は取得する必要があります第二の表の最初のテーブルのid

それから私は私が

第二のテーブルに最初のテーブルの idを得ることができた.....第三の表の第一および第二テーブルの idを取得する必要があります210

しかし、第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 

私はので、私は3番目のテーブル内の適切なIDS

を取得する必要があり、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> 

+1

へようこそStackOverflow:コード、XML、またはデータサンプルを投稿する場合は、**これらの行をテキストエディタで強調表示し、エディタツールバーの[コードサンプル]ボタン( '{}')をクリックしてくださいフォーマットと構文はそれを強調する! –

+1

...長い行を短い行に分割することも役に立ちます。たくさん。 – kol

+0

誰がこれらの**表と列名**?、!、!、!、!、!、 –

答えて

0

さて、あなたの主な問題は次のとおりです。あなただけの単一の行を挿入していない - しかし、行の全体の束を!

だから、最後に挿入されたID値を取得するために@@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値を挿入します。

ここで2番目のテーブルには、最初に挿入されたIDと2番目に挿入されたIDを関連付けることができる列はありますか? 2番目のINSERTから挿入されたID値を同じテーブル変数に取り込む必要がありますが、とID2との関連付けが何であるかは何らかの形でわかっている必要があります。 ....

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

+0

私のデータは、この

<ヘッダ詳細> データ データのように見える データ です <ヘッダ詳細> データ データ データ
user1104946

+0

user1104946 @:**コメント**にポスト大きくないテキストまたはXMLスニペットをしてください - 読むことは不可能の隣に!代わりに** **オリジナルの質問を** **それを編集して更新し、そこにその情報を提供してください** - ありがとう! –

関連する問題