【问题标题】:SQL Server 2008 R2: Only get NULL when using XQuery (.value) to query into XMLSQL Server 2008 R2:仅在使用 XQuery (.value) 查询 XML 时获取 NULL
【发布时间】:2015-05-27 08:36:50
【问题描述】:

我的表名为 Table_1,有 2 列:

id (int) and myxml (xml)

我在下面附上了我正在使用的 xml 快照。 (这个xml对应id = 1

我遇到的问题是,当使用 XQuery (.value) 查询此 XML 时,我只得到 NULL

这是我写的代码:

SELECT myXml.value('(Archivebatch/Cr/Modifcltn/Modif)[2]/@modiftype','int')
 from Table_1 where id = 1

无论我尝试从 xml 中查询什么,我都只会得到 NULL 我也尝试包含没有帮助的命名空间(仍然只返回 NULL)

编辑:我尝试通过以下方式包含命名空间:

WITH XMLNAMESPACES ('w3.org/2001/XMLSchema-instance' AS ns) 
select myXml.value(' 
(/ns:Archivebatch/ns:Cr/ns:Modifcltn/ns:Modif)[2]/@modiftype','int') 
from dbo.table_1 where id = 1 

【问题讨论】:

  • 请勿将代码附加为链接/图片。如果链接更改或损坏,问题将变得不完整。始终在问题本身中包含代码和相关信息。
  • 将 XML 复制粘贴到问题中不会花费太多精力,并且对于人们重现问题很有价值。另外,您是如何尝试在查询中包含命名空间的?
  • 抱歉图片。我已经更新了我的帖子以反映查询中的命名空间。 @har07

标签: sql sql-server xml sql-server-2008 xquery


【解决方案1】:

对这个特定查询重要的命名空间是这里定义的默认命名空间:

xmlns="SIMATIC_BATCH_V8_1_0"

所以你应该注册 ns 前缀以指向上述命名空间 URI,或者你可以使用 ;WITH XMLNAMESPACES 注册默认命名空间并从 xquery 中省略前缀,因为它现在成为默认值:

;WITH XMLNAMESPACES (DEFAULT 'SIMATIC_BATCH_V8_1_0')
select myXml.value('(/Archivebatch/Cr/Modifcltn/Modif)[2]/@modiftype','int') 
from dbo.table_1 where id = 1 

【讨论】:

  • 我花了一些时间在互联网和 Stackoverflow 上进行搜索,为什么有时会包含命名空间(就像您所做的那样)而有时却没有(就像我写的第一个代码一样)?是否必须始终包含命名空间?再次感谢!!
  • @MaytasMonsereenusorn 这取决于您正在处理的 XML。如果你的 XML 有命名空间,那么你应该以某种方式使用 ;WITH XMLNAMESPACES,如果 XML 没有,那么你可以像你写的第一个代码那样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多