0

SQLServer2008のSQLXMLに小さな問題があります。これが私のテストSQLクエリです

DECLARE @XMLTable TABLE(GameHistory XML)
INSERT INTO @XMLTable VALUES( '<game xmlns="http://my.name.space">
      <move>
       <player>white</player>
       <piece>pawn</piece>
       <start>A2</start>
       <end>A3</end>
      </move>
      <move>
       <player>black</player>
       <piece>pawn</piece>
       <start>D7</start>
       <end>D6</end>      
      </move>
     </game>')

SELECT GameHistory.query('/game/move[1]') FROM @XMLTable

ここで、名前空間(xmlns = "http://my.name.space")の部分を削除すると、クエリは正常に機能します。名前空間を削除すると問題が解決するのはなぜですか?

4

2 に答える 2

2

SELECT は要素/game/move( と の両方gameに名前空間moveない) を要求しますが、xml にそのような要素がありません。/game/move名前空間にある適切な要素を要求する必要がありますhttp://my.name.space。使用WITH XMLNAMESPACES:

;WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')
SELECT GameHistory.query('/game/move[1]') FROM @XMLTable
于 2009-09-03T21:37:59.907 に答える
1

問題は、XPath で名前空間が指定されていないため、名前空間が異なるために「ゲーム」要素が一致しないことです。一致するように、XPath で名前空間を指定する必要があります。

SELECT @x.query('declare namespace x="http://my.name.space"; /x:game/x:move[1]')
于 2009-09-03T21:38:27.317 に答える