名前空間には属性がほとんどないxmlがありますが、要素の名前空間とは異なります。SQL Server:名前空間が要素と異なる名前のXML属性から値を取得する
サンプルXML:上記のサンプルでは
<d:dataroot xmlns:m="urn:schemas-microsoft-com:xml-m" xmlns:d="urn:schemas-microsoft-com:xml-d">
<Books xmlns="http://tempuri.org/Books.xsd">
<Book d:id="1" m:name="Book1" isbn="123">
<Author>John</Author>
</Book>
<Book d:id="2" m:name="Book2" isbn="124">
<Author>John</Author>
</Book>
</Books>
</d:dataroot>
、私は
DROP TABLE #TestXml
CREATE TABLE #TestXml (XMLDATA XML);
INSERT INTO #TestXml (XMLDATA) VALUES ('<d:dataroot xmlns:m="urn:schemas-microsoft-com:xml-m" xmlns:d="urn:schemas-microsoft-com:xml-d">
<Books xmlns="http://tempuri.org/Books.xsd">
<Book d:id="1" m:name="Book1" isbn="123">
<Author>John</Author>
</Book>
<Book d:id="2" m:name="Book2" isbn="124">
<Author>John</Author>
</Book>
</Books>
</d:dataroot>');
SELECT * FROM #TestXml
WHERE XMLDATA.exist('//*:Book[@isbn="124"]') = 1
--;WITH XMLNAMESPACES (DEFAULT 'urn:schemas-microsoft-com:xml-d')
--SELECT * FROM #TestXml
--WHERE XMLDATA.exist('//*:Book[d:@id="2"]') = 1
下のスクリプトを実行すると、クエリisbn
doesntのように1に戻り、予想される結果はすべての名前空間を持っていますが、私は実行するとコメントクエリ私は以下のエラーを取得
Msg 9303, Level 16, State 1, Line 20
XQuery [#TestXml.XMLDATA.exist()]: Syntax error near ':', expected ']'.
試したさまざまな方法クエリの属性の名前空間を指定しますが、成功しません。
他のネームスペースを持つxml属性を、その中にある要素のネームスペースと照合する方法を知っている人はいますか?ありがとう。
ありがとうございますが、isbnを使ってクエリを実行しても問題ありません。問題は、名前空間が異なるため、クエリで属性idとnameを使用していることです。 –
@TonyStark:私の応答を更新しました - それはあなたが探している解決策ですか? –
はい、まさに私が探していたものです。属性のために名前空間の先頭に '@'を付ける必要はありません。ありがとう。 –