【发布时间】:2015-08-26 03:45:51
【问题描述】:
我正在尝试将 XML 数据导入 SQL Server。我找到了下面的链接。
我的要求略有不同,我需要创建以<name> 作为列名和<value> 作为列值的表。如下所示
XML:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:toatech:ResourceManagement:1.0">
<SOAP-ENV:Body>
<ns1:get_resources_list_response>
<result_code>0</result_code>
<resources>
<resource>
<properties>
<property>
<name>id</name>
<value>CAP_LOAD_TEST</value>
</property>
<property>
<name>status</name>
<value>inactive</value>
</property>
<property>
<name>parent_id</name>
<value>ABC_CO</value>
</property>
<property>
<name>type</name>
<value>GR</value>
</property>
<property>
<name>name</name>
<value>Capacity LoadTesting</value>
.
.
.
.
代码:
DECLARE @XmlFile XML
SELECT @XmlFile = BulkColumn
FROM OPENROWSET(BULK 'C:\Users\GET_RESOURCE_LIST.xml', SINGLE_BLOB) x
SELECT
Resource_id = resource.value('(value)[1]', 'varchar(255)'),
Resource_status = resource.value('(value)[2]', 'varchar(255)')
FROM
@XmlFile.nodes('//resources/resource/properties/property') AS XTbl1(resource)
因此,当“资源”项重复时,它应该是表中具有新值集的新行
预期的表格输出:
id status parent_id type name
== ====== ========= ==== ====
CAP_LOAD_TEST inactive ABC_CO GR Capacity LoadTesting
...
使用上面的代码,所有值都填充到一列。这就是问题所在。
【问题讨论】:
标签: sql sql-server xml