我在SQL Server 2005表中有一个列定义为XML数据类型。有没有办法根据该列中两个节点的顺序从该表中选择记录?例如,我们的XML中包含以下结构:
<item>
<latitude/>
<longitude/>
</item>
我想查看是否有任何相反顺序的纬度/经度记录,即<longitude/>
然后<latitude/>
。我尝试了一些XPath表达式,但没有运气。
答案 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,但它没有强制执行订单。我们希望强制执行订单,但我们希望在进行此更改之前查看是否有任何列的顺序相反。