首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL server中的SQLXML

SQL server中的SQLXML
EN

Stack Overflow用户
提问于 2009-09-03 21:28:23
回答 2查看 262关注 0票数 0

我在SQL Server2008中遇到了一个SQLXML的小问题。下面是我的测试SQL查询

代码语言:javascript
复制
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")部分,我的查询就能正常工作,为什么删除名称空间就能解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-03 21:38:00

您的SELECT请求元素/game/move (其中gamemove都没有名称空间),但是您的xml中没有这样的元素。您需要请求适当的元素,即名称空间http://my.name.space中的/game/move。使用WITH XMLNAMESPACES

代码语言:javascript
复制
;WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')
SELECT GameHistory.query('/game/move[1]') FROM @XMLTable
票数 2
EN

Stack Overflow用户

发布于 2009-09-03 21:38:27

问题是您的游戏没有指定名称空间,因此“XPath”元素不匹配,因为它们的名称空间不同。您需要在XPath中指定名称空间,以便它们匹配:

代码语言:javascript
复制
SELECT @x.query('declare namespace x="http://my.name.space"; /x:game/x:move[1]')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1376070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档