Выбор записей из столбца XML (SQL Server 2005) на основе порядка узлов

У меня есть столбец в таблице SQL Server 2005, определенный как тип данных XML. Есть ли способ выбрать записи из этой таблицы на основе порядка двух узлов в этом столбце? Например, у нас есть следующая структура в нашем XML:

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

Я хочу увидеть, есть ли какие-либо записи, у которых широта / долгота в обратном порядке, то есть <longitude/> тогда <latitude/> . Я пробовал несколько выражений XPath, но безуспешно.

Ответов (3)

У нас есть xsd, связанный со столбцом, но он не обеспечивает соблюдение порядка. Мы хотим обеспечить порядок, но мы хотим увидеть, находится ли какой-либо из столбцов в обратном порядке, прежде чем вносить это изменение.

Что ж, вы можете использовать связанный xsd для обеспечения соблюдения порядка. Я посмотрю, могу с удобством запросить ...

(обновлено) Я не уверен, что вы можете ... все соответствующие оси отключены, как и позиция (имя) и узел / позиция ()

Вы можете проверить, является ли первый дочерний элемент элемента долготой,

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.