4
有关背景看这个问题:麻烦
SQL Server XML Data Type query issue
我想查询对SQL Server的XML对象2005年查询工作正常没有时在XML中定义的名称空间。但是,当名称空间元素在那里时,我似乎无法获取节点元素的值。这里有一个例子:
DECLARE @xmlWithNameSpace XML
DECLARE @xmlWithoutNameSpace XML
SET @xmlWithNameSpace = '<?xml version="1.0" encoding="UTF-8"?>
<Feed xmlns="gizmo">
<Product id="4444">
<ProductId>4444</ProductId>
</Product>
</Feed>'
SET @xmlWithoutNameSpace = '<?xml version="1.0" encoding="UTF-8"?>
<Feed>
<Product id="4444">
<ProductId>4444</ProductId>
</Product>
</Feed>'
SELECT feed.product.value('@id[1]', 'INT') AS productId
FROM @xmlWithNameSpace.nodes('declare namespace ns="gizmo"; /ns:Feed/ns:Product') feed(product)
UNION ALL
SELECT feed.product.value('ProductId[1]', 'INT') AS productId
FROM @xmlWithNameSpace.nodes('declare namespace ns="gizmo"; /ns:Feed/ns:Product') feed(product)
UNION ALL
SELECT feed.product.value('@id[1]', 'INT') AS productId
FROM @xmlWithoutNameSpace.nodes('/Feed/Product') feed(product)
UNION ALL
SELECT feed.product.value('ProductId[1]', 'INT') AS productId
FROM @xmlWithoutNameSpace.nodes('/Feed/Product') feed(product)
这将返回
4444
NULL
4444
4444
我在做什么错,以获得产品编号节点(4444)时,命名空间是在使用中的价值?
在此先感谢您的任何指导。
顶部问题很好,但底部(WITH关键字)在SQL-Server-2012中引发语法错误 - 任何想法RP? – Hardryv 2016-02-17 23:26:06
尝试在WITH之前添加一个分号。我希望有所帮助。 – 2016-03-10 21:00:30