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進行相關的多個表

我的問題是:

我有三個表....前兩個表有idIDENTITY ...我需要得到在第二個表

然後我需要在第3臺第1和第2臺的id第一個表格的id .....我是能夠得到第一臺id到第二臺

但我無法將第二張表的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到3 .......有這麼多的循環中的XML,所以我需要得到相應的ID在第3臺

而我的數據看起來像這樣

<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或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)格式和語法突出顯示它! – 2011-12-18 21:38:37

+1

......並且將較長的一行分成較短的一行也會有所幫助。很多。 – kol 2011-12-18 21:41:29

+0

誰在地球上出現這些**表格和列名**??????!?!? – 2011-12-18 21:47:42

回答

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中將插入的標識值捕獲到同一個表變量中,但是您需要知道哪個ID1ID2相關聯 - 而且我很坦率地沒有看到您的陳述中將如何完成。 ...

但最後,你會有一個表格變量,其中有n行(ID1, ID2),然後你可以使用它插入你的第三個表格。

+0

我的數據看起來像這樣

<部首細節> 數據 數據 數據 <部首細節> 數據 數據 數據
user1104946 2011-12-18 23:04:36

+0

@ user1104946:請**不要**後大文本或XML片段爲註釋 - 幾乎不可能閱讀!請改爲:**更新**您的原始問題**編輯**並在那裏提供該信息 - 謝謝! – 2011-12-19 05:49:46