从 XML 更新 SQL table

Update SQL table from XML

我有两个不同的 XML 文件,我必须通过存储过程从中更新两个 SQL table。一种格式为 <InvoiceNumber>17-I-36528</InvoiceNumber>,并且工作正常。 第二个文件的格式 <field name="ABCD" type="String" identifier="d167bea7-2ec6-498e-9a8a-3d0e6f37b6b3" value="EFGF" /> 此文件不更新 table。 我在这里做错了什么?提前致谢。

不工作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="aa@abcd.com" />
  <field name="Email_To" type="String" identifier="9f9ad742-502b-44e4-b223-ae048b395bd3" value="bb@abcd.com" />
  <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\Outputfa318a-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

创建Table

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

尝试这样的事情。 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="aa@abcd.com" />
  <field name="Email_To" type="String" identifier="9f9ad742-502b-44e4-b223-ae048b395bd3" value="bb@abcd.com" />
  <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\Outputfa318a-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。