我在 SQL Server 2005 表中有一个列定义为 XML 数据类型。有没有办法根据该列中两个节点的顺序从该表中选择记录?例如,我们的 XML 中有以下结构:
<item>
<latitude/>
<longitude/>
</item>
我想看看是否有任何具有相反顺序的纬度/经度的记录,即<longitude/>
then <latitude/>
。我尝试了一些 XPath 表达式,但没有运气。
我在 SQL Server 2005 表中有一个列定义为 XML 数据类型。有没有办法根据该列中两个节点的顺序从该表中选择记录?例如,我们的 XML 中有以下结构:
<item>
<latitude/>
<longitude/>
</item>
我想看看是否有任何具有相反顺序的纬度/经度的记录,即<longitude/>
then <latitude/>
。我尝试了一些 XPath 表达式,但没有运气。
您可以检查 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 中的几何列来存储坐标是个好主意。
好吧,您可以使用关联的 xsd 来强制执行该命令。我去看看 我可以方便查询...
(更新)我不确定你能不能......适当的轴都被禁用,位置(名称)和节点/位置()也是如此
我们确实有一个与该列关联的 xsd,但它没有强制执行顺序。我们想强制执行顺序,但我们想在进行此更改之前查看是否有任何列的顺序相反。