Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Cammomile Member Откуда: Сообщений: 1214 |
А тут гарантия какая? Ссылка на доку есть? |
10 окт 14, 15:59 [16688058] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
ORDER BY Clause (Transact-SQL) SQL Server 2014 Other Versions 1 out of 1 rated this helpful - Rate this topic Sorts data returned by a query in SQL Server. Use this clause to: Order the result set of a query by the specified column list and, optionally, limit the rows returned to a specified range. The order in which rows are returned in a result set are not guaranteed unless an ORDER BY clause is specified. На самом деле такое утверждение есть в ANSI SQL. |
||
10 окт 14, 16:28 [16688195] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А какое отношение ORDER BY имеет к внутренностям функции OPENXML ? Или к парсеру xml ? И если вы не заметели, то у edge таблицы уже проставлены id. Сообщение было отредактировано: 10 окт 14, 16:31 |
||
10 окт 14, 16:30 [16688201] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Кстати, OPENXML - это вариант, он использует DOM и обходит узлы наверняка последовательно. |
10 окт 14, 16:41 [16688264] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
строго говоря, никто не обещал, что они в порядке следования нод в xml проставляются, сказано только что у рута id = 0 и они уникальны. хотя, иное было бы странным. |
||
10 окт 14, 16:47 [16688311] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А где гарантия того, что X.R.value('count(for $s in /data/row where $s << . return("1"))', 'int') что-то делает в порядке следования нод ? OPENXML по крайней мере возвращает вам подтверждение своего порядка обхода нод |
||||
10 окт 14, 16:51 [16688346] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
как это, где? << - это оператор, который именно проверяет порядок следования нод. |
||
10 окт 14, 16:57 [16688389] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И каков этот порядок ? Он всегда соответствует следованию нод ? |
||
10 окт 14, 16:59 [16688401] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
Вообще ни один парсер не гарантирует порядка следования одинаковых DOM-узлов на одном уровне иерархии, который бы полностью соотвествовал порядку аналогов этих узлов в разметке. Это касается и DOM-парсера, и OPENXML, и всего прочего. Здесь остается только опираться на эмпирику. Я на своем опыте, например, не сталкивался с тем, что nodes смешивает порядок узлов. Кто-то аналогичное может сказать про OPENXML. И вопрос к ТС: чем так важен этот порядок? В отсутствие признака, определяющего упорядоченность, требовать эту упорядоченность - то же самое, что требовать упорядоченности у SELECT без ORDER BY. |
10 окт 14, 16:59 [16688403] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Такое, что в запросе SELECT * FROM OPENXML(@docHandle, N'/data/row') ORDER BY отсутствует, а это значит, что по документации Microsoft и ANSI SQL, порядок строк не гарантирован. |
||||
10 окт 14, 16:59 [16688404] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И что с того, что ORDER BY отсутствует? Выходной набор уже содержит нумерацию |
||
10 окт 14, 17:00 [16688414] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
ну, вот вам из документации: http://msdn.microsoft.com/en-us/library/ms190935.aspx
что-то не так? |
||||||
10 окт 14, 17:01 [16688421] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это вы пытаетесь сказать, что что-то не так Я ничего "не так" не вижу. |
||
10 окт 14, 17:03 [16688444] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
то есть, это именно порядок расположения нод в документе, не обхода их, если вы об этом. |
10 окт 14, 17:04 [16688449] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
покажите мне, где в документации сказано, что id в edge table идут в порядке расположения нод в документе, и я тогда перестану видеть, что "не так". |
||||
10 окт 14, 17:07 [16688467] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
На уровне DOM или .NET порядок гарантирован. XMLDocument в .NET порядок нодов гарантирован, в XMLReader гарантирован. Просто люди, которые создавали эти XML не подумали о специфике работы с ними на уровне БД. Но как только результат работы этих библиотек проходит через оператор SELECT эта гарантия снимается. Вы можете увидеть, что порядо строк правильный сейчас, но Майкрософт неожиданно выпустит патч, где оптимизирует OPENXML -- запихнёт туда параллельную обработку, например, и всё поедет. |
||||
10 окт 14, 17:09 [16688483] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
вот это:
строчка, содержащая XML - это не документ, это просто разметка, документом она становится тогда, когда парсер разберет эту строчку на ноды. В каком порядке он будет делать разбор, и в какм порядке будет помещать ноды в результирующее дерево - нет никакой гарантии. Потом, конечно, можно оприаться на порядок нод в документе, но гарантий соответствия этого порядка порядку в разметке - нет. |
||||||
10 окт 14, 17:11 [16688494] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В документации этого нет. Но выдаваемый результат нумерации показывает, что порядок есть. id/parentid в результатах не я же сформировал. |
||
10 окт 14, 17:11 [16688495] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
Вы не подскажете ссылку на документацию, где говорится о гарантии соотвествия порядка нод порядку аналогов в разметке для XMLDocument? Я просто в свое время интересовался этим вопросом, но так ничего и не нашел в подтверждение. |
||
10 окт 14, 17:13 [16688504] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
но тогда в операторе сравнения следования нод не было бы никакого смысла. а его зачем-то ввели. я думаю, создатели xquery, все же, что-то имели в виду. |
||||||
10 окт 14, 17:25 [16688571] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Это очевидно следует из наличия таких функций как InsertAfter, InsertBefore, FirstChild, NextSibling и некоторых других. http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.insertbefore(v=vs.110).aspx |
||||
10 окт 14, 17:42 [16688659] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
Я думаю, они всё же исходили из того, что какие-то гарантии соответствия следования нод есть:
( http://msdn.microsoft.com/ru-ru/library/ms186398.aspx ) и если в цитате под the first <Customer> element подразумевается первый элемент в разметке, то учитывая
( http://msdn.microsoft.com/ru-ru/library/ms188282.aspx ) думаю, вполне можно полагать, что результирующий вывод nodes() без order by соответствует расположению нод в разметке, и не ухищряться с xquery-сортировкой. Хотелось бы, чтобы кто-нибудь сказал, что видел примеры несоответствия. |
||||||
10 окт 14, 17:42 [16688660] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
Вот именно из них - совсем неочевидно. Еще раз см. выше про разницу между нодой в распарсенном документе, и строчкой символов в разметке. |
||
10 окт 14, 17:44 [16688667] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Ещё раз, пока используются функции DOM порядок гарантируется. Всё, что вы делаете внутри nodes, xpath, xquery имеет гарантированный порядок следования нодов. SelectNodes в XmlDocument тоже. Как только вы пропускаете результат этого через SELECT без ORDER BY результат не гарантирован. Вы можете провести гигантские испытания и доказать что все такие SELECT отработали правильно, а потом при переходе с SQL 2014 на SQL 2016 или накате патча нарваться на изменения порядка. |
||
10 окт 14, 17:46 [16688673] Ответить | Цитировать Сообщить модератору |
Сон Веры Павловны Member Откуда: Сообщений: 6118 |
Ну, тогда еще раз: ссылку, подтверждающую именно вышесказанное, а не дающая пищу для косвенных выводов. |
||
10 окт 14, 17:48 [16688678] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |