Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008 R2:仅在使用XQuery(.value)查询到XML时获取NULL_Sql_Sql Server_Xml_Sql Server 2008_Xquery - Fatal编程技术网

SQL Server 2008 R2:仅在使用XQuery(.value)查询到XML时获取NULL

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 我

我的表称为表_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 我也尝试过包含名称空间,但它仍然只返回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没有,那么您可以像编写第一个代码一样执行它