我在SQL Server2008中遇到了一个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")部分,我的查询就能正常工作,为什么删除名称空间就能解决这个问题呢?
发布于 2009-09-03 21:38:00
您的SELECT请求元素/game/move (其中game和move都没有名称空间),但是您的xml中没有这样的元素。您需要请求适当的元素,即名称空间http://my.name.space中的/game/move。使用WITH XMLNAMESPACES
;WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')
SELECT GameHistory.query('/game/move[1]') FROM @XMLTable发布于 2009-09-03 21:38:27
问题是您的游戏没有指定名称空间,因此“XPath”元素不匹配,因为它们的名称空间不同。您需要在XPath中指定名称空间,以便它们匹配:
SELECT @x.query('declare namespace x="http://my.name.space"; /x:game/x:move[1]')https://stackoverflow.com/questions/1376070
复制相似问题