sql server 2008 xml файл в таблицу
У меня есть XML-файл, который я пытаюсь импортировать в таблицу. Мой XML-файл выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<xml_objects xmlns="http://www.blank.info/ns/2002/ewobjects">
<item_id item_id="41-FE-001">
<class display="true">
<class_name>FEEDER</class_name>
</class>
<name display="true">
<name_value>41-FE-001</name_value>
</name>
<attributes>
<attribute>
<attributename>Type</attributename>
<value>EQUIP</value>
</attribute>
<attribute>
<attributename>Tag No</attributename>
<value>41-FE-001</value>
</attribute>
</attributes>
</item_id>
</xml_object>
Это SQL, который я использую. Я не могу получить SQL, чтобы вернуть какие-либо значения:
CREATE TABLE [dbo].[item_data](
[item_id] [nchar](15) NULL,
[class] [nchar](10) NULL,
) ON [PRIMARY]
GO
--INSERT INTO item_data (item_id)
SELECT xmldata.value('(@item_id)', 'NCHAR') AS item_id
FROM (
SELECT CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\xmlfile.xml',
SINGLE_BLOB) AS T(x)) AS T(x)
CROSS APPLY x.nodes('//xml_objects/item_id') AS X(xmldata);
Я пробовал различные синтаксис xpath и SQL. Я не могу получить SQL, чтобы вернуть какие-либо значения. Любая помощь будет принята с благодарностью.
1 ответ
Вы игнорируете пространство имен XML, определенное для корневого элемента:
<xml_objects xmlns="http://www.blank.info/ns/2002/ewobjects">
***********************************************
Вы должны добавить это к вашему запросу:
;WITH XMLNAMESPACES(DEFAULT 'http://www.blank.info/ns/2002/ewobjects')
SELECT
xmldata.value('(@item_id)', 'NCHAR') AS item_id
FROM
(SELECT CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\xmlfile.xml',
SINGLE_BLOB) AS T(x)) AS T(x)
CROSS APPLY
x.nodes('//xml_objects/item_id') AS X(xmldata);