2015-03-25 132 views
1

我有兩個不同的XML文件,我必須通過存儲過程更新兩個SQL表。一種格式爲<InvoiceNumber>17-I-36528</InvoiceNumber>,工作正常。 第二個文件格式爲 <field name="ABCD" type="String" identifier="d167bea7-2ec6-498e-9a8a-3d0e6f37b6b3" value="EFGF" />此文件不更新表格。 我在這裏做錯了什麼?提前致謝。從XML更新SQL表

不工作的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<document name="COM1-0000000011" type="Commercial_Doc" identifier="02fa318a-bd80-4f73-97bb-141884fbcff5" description="" client="Level 4" process="LEVEL 4 - Commercial" deleted="False"> 
    <field name="Email_From" type="String" identifier="d167bea7-2ec6-498e-9a8a-3d0e6f37b6b3" value="[email protected]" /> 
    <field name="Email_To" type="String" identifier="9f9ad742-502b-44e4-b223-ae048b395bd3" value="[email protected]" /> 
    <field name="Email_Subject" type="String" identifier="cb7c7194-bc4c-4e44-b9b6-7643f1faca13" value="Second set" /> 
    <field name="Email_EmailDate" type="DateTime" identifier="7476b62b-ec35-432b-8d50-572ed504133e" value="03/18/2015 04:05:09" /> 
    <field name="Email_LocalDate" type="DateTime" identifier="ce571c82-440a-4ffd-8ee9-ebf53c1e9071" value="03/18/2015 09:35:09" /> 
    <field name="Email_ReceivedDate" type="String" identifier="f007da05-2ffa-4290-9f28-6cd15de3c5b1" value="03/18/2015 09:35:10" /> 
    <field name="Email_Charset" type="String" identifier="237a7237-b57a-404c-9fdb-39eca5a0d197" value="us-ascii" /> 
    <field name="Email_PreferredCharset" type="String" identifier="f577b3b5-46a2-45ea-8db5-f1b8dc478d2b" value="" /> 
    <field name="OutputImageFile" type="String" identifier="bec3db3f-21c0-4491-99e2-ea32e0f2b788" value="E:\Level 4\ComDoc\Output\02fa318a-bd80-4f73-97bb-141884fbcff5.PDF" /> 
    <table name="itemdata" /> 
</document> 

存儲過程

CREATE PROCEDURE [dbo].[prc_Commercial_Invoice_XML] 
(
    @XMLdata XML 
) 
AS 
BEGIN 

    INSERT INTO [DocumentDetails] 
      ([Name] 
      ,[Type] 
      ,[Identifier] 
      ,[Value] 
      ,[ItemType]) 
    SELECT 
      [Name] = TempTable.t.value('Email_From[1]','nvarchar(120)') 
      ,[Type] = TempTable.t.value('Email_To[1]','nvarchar(120)') 
      ,[Identifier] = TempTable.t.value('Email_Subject[1]','nvarchar(120)') 
      ,[Value] = TempTable.t.value('Email_ReceivedDate[1]','nvarchar(120)') 
      ,[ItemType] = TempTable.t.value('Email_Charset[1]','nvarchar(120)') 
    FROM 
      @XMLdata.nodes('/')AS TempTable(t) 

END 

創建表

CREATE TABLE [dbo].[DocumentDetails](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [ItemType] [varchar](120) NULL, 
    [Name] [varchar](120) NULL, 
    [Type] [varchar](120) NULL, 
    [Identifier] [varchar](120) NULL, 
    [Value] [varchar](120) NULL, 
CONSTRAINT [PK_DocumentDetails] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

回答

0

嘗試這樣的事情。 SQL Fiddle

DECLARE @XMLdata XML = '<?xml version="1.0" encoding="utf-8"?> 
<document name="COM1-0000000011" type="Commercial_Doc" identifier="02fa318a-bd80-4f73-97bb-141884fbcff5" description="" client="Level 4" process="LEVEL 4 - Commercial" deleted="False"> 
    <field name="Email_From" type="String" identifier="d167bea7-2ec6-498e-9a8a-3d0e6f37b6b3" value="[email protected]" /> 
    <field name="Email_To" type="String" identifier="9f9ad742-502b-44e4-b223-ae048b395bd3" value="[email protected]" /> 
    <field name="Email_Subject" type="String" identifier="cb7c7194-bc4c-4e44-b9b6-7643f1faca13" value="Second set" /> 
    <field name="Email_EmailDate" type="DateTime" identifier="7476b62b-ec35-432b-8d50-572ed504133e" value="03/18/2015 04:05:09" /> 
    <field name="Email_LocalDate" type="DateTime" identifier="ce571c82-440a-4ffd-8ee9-ebf53c1e9071" value="03/18/2015 09:35:09" /> 
    <field name="Email_ReceivedDate" type="String" identifier="f007da05-2ffa-4290-9f28-6cd15de3c5b1" value="03/18/2015 09:35:10" /> 
    <field name="Email_Charset" type="String" identifier="237a7237-b57a-404c-9fdb-39eca5a0d197" value="us-ascii" /> 
    <field name="Email_PreferredCharset" type="String" identifier="f577b3b5-46a2-45ea-8db5-f1b8dc478d2b" value="" /> 
    <field name="OutputImageFile" type="String" identifier="bec3db3f-21c0-4491-99e2-ea32e0f2b788" value="E:\Level 4\ComDoc\Output\02fa318a-bd80-4f73-97bb-141884fbcff5.PDF" /> 
    <table name="itemdata" /> 
</document>' 
    SELECT 
      [Name] = TempTable.t.value('@name[1]','nvarchar(120)') 
      ,[Type] = TempTable.t.value('@type[1]','nvarchar(120)') 
      ,[Identifier] = TempTable.t.value('@identifier[1]','nvarchar(120)') 
      ,[Value] = TempTable.t.value('@value[1]','nvarchar(120)') 
    FROM 
      @XMLdata.nodes('/document/field')AS TempTable(t) 

查詢不迎合項目 「的ItemType」 一欄。您可以根據需要將它添加到XML中。

+0

非常感謝。它的工作。 – 2015-03-25 07:23:54