Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/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
根据节点顺序从XML列(SQLServer2005)中选择记录_Xml_Sql Server 2005_Xquery - Fatal编程技术网

根据节点顺序从XML列(SQLServer2005)中选择记录

根据节点顺序从XML列(SQLServer2005)中选择记录,xml,sql-server-2005,xquery,Xml,Sql Server 2005,Xquery,我在SQLServer2005表中有一列定义为XML数据类型。有没有办法根据该列中两个节点的顺序从此表中选择记录?例如,我们的XML中有以下结构: <item> <latitude/> <longitude/> </item> 我想看看是否有纬度/经度顺序相反的记录,即then。我尝试了一些XPath表达式,但没有成功。好吧,您可以使用关联的xsd来强制执行该命令。我会看的,我可以方便地查询 更新我不确定你能不能。。。相应的轴都被禁用

我在SQLServer2005表中有一列定义为XML数据类型。有没有办法根据该列中两个节点的顺序从此表中选择记录?例如,我们的XML中有以下结构:

<item>
   <latitude/>
   <longitude/>
</item>

我想看看是否有纬度/经度顺序相反的记录,即then。我尝试了一些XPath表达式,但没有成功。

好吧,您可以使用关联的xsd来强制执行该命令。我会看的,我可以方便地查询


更新我不确定你能不能。。。相应的轴都被禁用,正如positionname和node/position一样,我们确实有一个与列关联的xsd,但它没有强制执行顺序。我们希望强制执行顺序,但在进行此更改之前,我们希望查看是否有任何列的顺序相反

您可以检查item元素的第一个子元素是否为longitude

SELECT COUNT(1)
FROM tblFoo
WHERE xmlCol.value('local-name((/item/*)[1])', 'varchar(max)') = 'longitude'
测试脚本

另外,最好使用SQL 2008中的几何体列来存储坐标

DECLARE @xml as xml
SET @xml = 
'<item>
   <longitude/>
   <latitude/>      
</item>
'
IF @xml.value('local-name((/item/*)[1])', 'varchar(max)') = 'longitude'
    PRINT 'first element is longitude'

--Output: first element is longitude