Sql server 将xml文件加载到SQL Server表中不起作用。
我有一个XML文件,我正试图加载到SQL server中,但当我运行脚本时,它没有显示任何行Sql server 将xml文件加载到SQL Server表中不起作用。,sql-server,xml,tsql,xpath,xquery,Sql Server,Xml,Tsql,Xpath,Xquery,我有一个XML文件,我正试图加载到SQL server中,但当我运行脚本时,它没有显示任何行 <root> <DeviceRecord xmlns="http://www.archer-tech.com/"> <IP>137.52</IP> <FQDN>sdcww00</FQDN> <NetBios_Name></NetBios_Name> <Operatin
<root>
<DeviceRecord xmlns="http://www.archer-tech.com/">
<IP>137.52</IP>
<FQDN>sdcww00</FQDN>
<NetBios_Name></NetBios_Name>
<Operating_System>Microsoft Windows Vista</Operating_System>
<Mac_Address></Mac_Address>
<Confidence_Level>65
</Confidence_Level>
</DeviceRecord>
<DeviceRecord xmlns="http://www.archer-tech.com/">
<IP>155.37.51</IP>
<FQDN>ww00048</FQDN>
<NetBios_Name></NetBios_Name>
<Operating_System>Microsoft Windows Vista</Operating_System>
<Mac_Address></Mac_Address>
<Confidence_Level>65
</Confidence_Level>
</DeviceRecord>
</root>
首先,您必须检查XML是否正确读取。将XML读入变量后使用此选项:
SELECT @xmldata;
其次,所有值都存在于默认名称空间中。你必须申报:
WITH XMLNAMESPACES(DEFAULT 'http://www.archer-tech.com/')
第三,您的查询应该读取所有嵌套的
条目。您可能需要.nodes()
向下到该级别。完整查询应如下所示:
WITH XMLNAMESPACES(DEFAULT 'http://www.archer-tech.com/')
SELECT
x.Rec.value('(IP/text())[1]','varchar(20)') AS DevRec_ID
,x.Rec.value('(FQDN/text())[1]','varchar(20)') AS DevRec_FQDN
--The rest should be the same approach...
FROM @xmldata.nodes('/*:root/DeviceRecord') as x(rec)
编辑:您的节点不是默认命名空间的一部分。
我使用了一个通配符(
*:root
)首先,您必须检查XML是否正确读取。将XML读入变量后使用此选项:
SELECT @xmldata;
其次,所有值都存在于默认名称空间中。你必须申报:
WITH XMLNAMESPACES(DEFAULT 'http://www.archer-tech.com/')
第三,您的查询应该读取所有嵌套的
条目。您可能需要.nodes()
向下到该级别。完整查询应如下所示:
WITH XMLNAMESPACES(DEFAULT 'http://www.archer-tech.com/')
SELECT
x.Rec.value('(IP/text())[1]','varchar(20)') AS DevRec_ID
,x.Rec.value('(FQDN/text())[1]','varchar(20)') AS DevRec_FQDN
--The rest should be the same approach...
FROM @xmldata.nodes('/*:root/DeviceRecord') as x(rec)
编辑:您的节点不是默认命名空间的一部分。
我使用了一个通配符(*:root
)