我有一些标准的XML代码,我试图提取,我已经阅读了关于xmlns的各种不同的问题,并且我的代码到目前为止,但我似乎无法做的是提取“ “对于CustomerID -
DECLARE @docHandle INT
DECLARE @XmlDocument NVARCHAR(1000)
DECLARE @rootxmlns VARCHAR(1000)
SET @XmlDocument ='
<Root xmlns="http://www.adventure-works.com">
<Customers>
<Customer CustomerID="GREAL">
<CompanyName>Great Lakes Food Market</CompanyName>
<ContactName>Howard Snyder</ContactName>
<ContactTitle>Marketing Manager</ContactTitle>
<Phone>(503) 555-7555</Phone>
</Customer>
</Customers>
</Root> '
SET @rootxmlns = '<Root xmlns:hm="http://www.adventure-works.com"/>'
-- Create an internal representation of the XML document.
EXEC Sp_xml_preparedocument
@docHandle output,
@XmlDocument,
@rootxmlns
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@docHandle, '/hm:Root/hm:Customers', 3)
WITH ([CustomerID] CHAR(10) './hm:CustomerID'
,[Customer.CompanyName] VARCHAR(100)'hm:Customer/hm:CompanyName'
,[Customer.ContactName] VARCHAR(100)
'hm:Customer/hm:ContactName' )
EXEC Sp_xml_removedocument
@docHandle
1 回答
使用
FROM OPENXML
的方法以及用于创建和删除XML文档的存储过程已经过时,不应再使用 . 更好,更快,更容易阅读the native XML methods(自2005年以来一些支持) .我将您的XML放在一个本机声明的变量中 . 但是,您可以将此方法内联到任何针对表数据的查询中,这允许在VIEW和iTVF中使用XML .
xmlns="Some URI"
)从
<Customers>
的复数我假设,在一个XML中可能有多个客户 . 这就是为什么我使用.nodes()
来获取所有客户的派生表(将按行每个客户返回) ..value()
-method将读取第二个参数中提供的特定值 .