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つのテーブルはid...私は2番目のテーブルの最初のテーブルのIDENTITYを取得する必要がありますid

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

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

2番目のテーブルのを3番目に取得するためにストアドプロシージャで何を変更する必要がありますかid.......xmlには非常に多くのループがあるため、3番目のテーブルで適切な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>

4

1 に答える 1

0

さて、あなたの主な問題は、単一の行を挿入するだけでなく、たくさんの行を挿入することです!

したがって@@IDENTITY、最後に挿入されたID値を取得するために使用できますが(ところで: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番目のテーブルについて、最初と2番目に挿入されたIDを関連付けることができる列はありますか?挿入されたID値を2番目から同じテーブル変数にキャプチャする必要がありますが、どちらに関連付けるINSERTかをどうにかして知る必要があります。率直に言って、ステートメントでそれがどのように行われるかはわかりません。 。ID1ID2

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

于 2011-12-18T21:52:55.950 に答える