【问题标题】:From xml to table using sql server使用 sql server 从 xml 到 table
【发布时间】:2014-01-02 17:34:20
【问题描述】:

我需要把这个 xml 从这里变成:

          <Row>
            <Columns>
              <Column>
                <Value>BB1</Value>
                <Name>Location</Name>
              </Column>
              <Column>
                <Value>1593338</Value>
                <Name>Location_Key</Name>
              </Column>
              <Column>
                <Value>0</Value>
                <Name>Quantity</Name>
              </Column>
            </Columns>
          </Row>
          <Row>
            <Columns>
              <Column>
                <Value>DR11 40</Value>
                <Name>Location</Name>
              </Column>
              <Column>
                <Value>1593251</Value>
                <Name>Location_Key</Name>
              </Column>
              <Column>
                <Value>0</Value>
                <Name>Quantity</Name>
              </Column>
            </Columns>
          </Row>

到这个包含这些列和行的表

(Location)  (Location_Key)  (Quantity)
BB1         1593338            0 
DR11        1593251            0

使用 Sql 服务器

我已经尝试了几个星期,但无济于事。 任何答案将不胜感激。

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?
  • 该表是否已存在于您的数据库中,或者您是否尝试自动创建该表,然后向其中添加行?

标签: sql-server xml xml-parsing rows


【解决方案1】:

试试这个:

DECLARE @input XML = '<Row>
            <Columns>
              <Column>
                <Value>BB1</Value>
                <Name>Location</Name>
              </Column>
              <Column>
                <Value>1593338</Value>
                <Name>Location_Key</Name>
              </Column>
              <Column>
                <Value>0</Value>
                <Name>Quantity</Name>
              </Column>
            </Columns>
          </Row>
          <Row>
            <Columns>
              <Column>
                <Value>DR11 40</Value>
                <Name>Location</Name>
              </Column>
              <Column>
                <Value>1593251</Value>
                <Name>Location_Key</Name>
              </Column>
              <Column>
                <Value>0</Value>
                <Name>Quantity</Name>
              </Column>
            </Columns>
          </Row>'

SELECT
    Location = xc.value('(Column[Name="Location"]/Value)[1]', 'varchar(20)'),
    LocationKey = xc.value('(Column[Name="Location_Key"]/Value)[1]', 'varchar(20)'),
    Quantity = xc.value('(Column[Name="Quantity"]/Value)[1]', 'int')
FROM 
    @input.nodes('/Row/Columns') AS XT(XC)

这会给你一个类似这样的输出:

您可以在 INSERT INTO ..... 中使用此 SELECT 或做任何您喜欢用它做的事情。

【讨论】:

  • 我还需要知道如何/在哪里声明命名空间:
    &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; &lt;soap:Body&gt; &lt;ExecuteDataSourceResponse xmlns="http://www.plexus-online.com/DataSource"&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多