空の名前空間を持つノードを使用してXMLフィールドでXpathクエリを実行すると、SQL Server2008R2で奇妙な動作が発生しました。
このクエリは結果を返しません:
[xml_field].query('/RootNode/NodeWithEmptyNamespace')
このクエリは結果を返します:
[xml_field].query('/dft:RootNode/NodeWithEmptyNamespace')
明確にするために、このクエリは結果も返すため、ルートノード(およびおそらくデフォルトの名前空間)にプレフィックスは必須ではありません。
[xml_field].query('/RootNode')
XML名前空間によると、空の名前空間が定義されている場合のデフォルトのドキュメントでは、名前空間はnoneです。
データベースのXMLは次のとおりです。
<RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org">
<otherNode>Dummy data</otherNode>
<NodeWithEmptyNamespace xmlns="">Other dummy data</NodeWithEmptyNamespace>
</RootNode>
完全なクエリ:
WITH XMLNAMESPACES ('http://tempuri.org' as dft)
SELECT TOP 150 [ID],
[xml_field].query('/dft:RootNode/NodeWithEmptyNamespace')
FROM [database];
誰かがこの動作の説明を持っていますか、それともこれはバグですか?