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