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

时间:2009-02-23 14:55:43

标签: xml sql-server-2005 xquery

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

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

我想查看是否有任何相反顺序的纬度/经度记录,即<longitude/>然后<latitude/>。我尝试了一些XPath表达式,但没有运气。

3 个答案:

答案 0 :(得分:1)

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

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

测试脚本

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

P.S。最好使用SQL 2008中的几何列来存储坐标。

答案 1 :(得分:0)

好吧,您可以使用关联的xsd来强制执行订单。我会看到它可以方便地查询 ...

(更新)我不确定你能否...相应的轴都被禁用,位置(名称)和节点/位置()

答案 2 :(得分:0)

我们确实有一个与该列关联的xsd,但它没有强制执行订单。我们希望强制执行订单,但我们希望在进行此更改之前查看是否有任何列的顺序相反。