我必须将XML数据导入SQL Server数据库。我有以下XML(例如):
<ROOT xmlns="http://www.w3.org/1999/xhtml">
<Customer CustomerID="1" CompanyName="xyz" />
<Customer CustomerID="2" CompanyName="abc" />
</ROOT>
使用架构:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customer" sql:relation="Customers" >
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="CompanyName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
运行标准MSDN(http://msdn.microsoft.com/ru-ru/library/ms172633.aspx)VBScript SQLXMLBulkLoad
将成功,但不会加载任何数据。
如果删除命名空间引用(xmlns属性),它将起作用。
XSD不允许您映射属性&#39; xmlns&#39;,因此sql:mapped='false'
在这里不起作用。
问题是,源XML无法更改,甚至可以仅使用XSD架构解决问题吗?
答案 0 :(得分:0)
使用SQL Server 2005 或更新版本中提供的标准XQuery看起来非常简单:
DECLARE @XmlData XML = '<ROOT xmlns="http://www.w3.org/1999/xhtml">
<Customer CustomerID="1" CompanyName="xyz" />
<Customer CustomerID="2" CompanyName="abc" />
</ROOT>'
;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/1999/xhtml')
SELECT
ID = XC.value('@CustomerID', 'int'),
CompanyName = XC.value('@CompanyName', 'varchar(50)')
FROM
@XmlData.nodes('/ROOT/Customer') XT(XC)
给我一个输出:
也很容易在INSERT INTO ....
语句中使用