Использует ли метод nodes()
типа данных типа ввода данных в порядке документа?Поддерживает ли метод `nodes()` порядок документа?
Например, если есть данные, такие как:
declare @xml xml
set @xml = '<Fruits><Apple /><Banana /><Orange /><Pear /></Fruits>'
, которая запрашивается в качестве
select T.c.query('.')
from @xml.nodes('/Fruits/*') T(c)
будут элементы будут возвращены в порядке документа? Порядок строк, возвращаемых select
, как известно, не определен, если пункт order by
опущен. Это дело для select ... from ... .nodes()
, или это исключительный?
Можно ли в некоторых обстоятельствах, чтобы получить непустой набор строк в выводе следующего запроса:
declare @xml xml
set @xml = '<Data><Element OrderNo="1" /><Element OrderNo="2" />'
+ '<Element OrderNo="3" /><Element OrderNo="4" />'
+ '<Element OrderNo="5" /></Data>'
select * from (
select T.c.value('.', 'int') OrderNo1,
row_number() over (order by @@spid) OrderNo2
from @xml.nodes('/Data/Element/@OrderNo') T(c)) sq
where OrderNo1 != OrderNo2
Хотя я оставил это сообщение (потому что он содержит лучший сбор информации, который я видел по этой теме), это определенная дыра в реализации Microsoft SQL. Oracle, DB2 и PostgreSQL (как минимум) имеют столбцы OR ORIGINALITY в XML-таблицах. Я нахожу кое-что проще с использованием расширений XML (не ANSI) XML; другие вещи проще с SQL/XML в стиле ANSI. В основном это мытье.Но это явно отсутствующая функция без чистой альтернативы (он сказал, надеясь, что MS слушал). – unbob