0

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

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

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

4

3 回答 3

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

PS 使用 SQL 2008 中的几何列来存储坐标是个好主意。

于 2009-02-23T15:43:11.513 回答
0

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

(更新)我不确定你能不能......适当的轴都被禁用,位置(名称)和节点/位置()也是如此

于 2009-02-23T15:06:38.807 回答
0

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

于 2009-02-23T15:18:05.177 回答