SQL Server 2008 R2:仅在使用XQuery(.value)查询到XML时获取NULL
我的表称为表_1,有两列:SQL Server 2008 R2:仅在使用XQuery(.value)查询到XML时获取NULL,sql,sql-server,xml,sql-server-2008,xquery,Sql,Sql Server,Xml,Sql Server 2008,Xquery,我的表称为表_1,有两列: 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 我
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
此特定查询的重要命名空间是此处定义的默认命名空间:
xmlns="SIMATIC_BATCH_V8_1_0"
因此,您应该注册ns前缀以指向上述名称空间URI,或者您可以使用注册默认名称空间;使用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
不要将代码附加为链接/图片。如果链接更改或断开,问题将变得不完整。在问题本身中始终包含代码和相关信息。将XML复制粘贴到问题中不会花费太多精力,而且对于人们重现问题很有价值。还有,您是如何尝试在查询中包含名称空间的?很抱歉,关于此图像。我已经更新了我的帖子,以反映查询中的名称空间@har07I花了一些时间在internet和Stackoverflow上搜索,为什么有时会像您所做的那样包含名称空间,而有时又不像我编写的第一个代码?是否必须始终包含名称空间?再次感谢@这可能取决于您处理的XML。如果XML有名称空间,那么应该使用;以某种方式使用XMLNAMESPACES,如果XML没有,那么您可以像编写第一个代码一样执行它