【问题标题】:Update SQL table from XML从 XML 更新 SQL 表
【发布时间】:2015-03-25 04:13:50
【问题描述】:

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

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\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

【问题讨论】:

    标签: sql-server xml database stored-procedures


    【解决方案1】:

    试试这样的。 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\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 中。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2021-12-12
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多