Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
Собственно, сабж.
Сразу поясню проблему: есть таблица, созданная как select field1, field2 into mytable from othertable order by othertable.id
То есть в mytable отсутствует первичный ключ. Потом таблицу othertable удаляют, остается только таблица mytable.
И вот, надо проставить порядок строк в том же порядке, в котором они были в таблице othertable. Операций над mytable не производилось, только select, никаких изменений.

Да, я знаю, что сервер не имеет какой-то постоянно гарантируемой сортировки строк без order by. Но как-то же он определяет, в каком порядке их выводить... А мне надо восстановить порядок вставки, ну или хотя бы попытаться сделать это, другого выхода нет. Это одноразовая процедура, что называется - последняя надежда.
На первый взгляд вроде бы сортировка сохранилась, если просто select без order by сделать. Но было бы очень плохо, если часть строк все же будет не в первоначальном порядке. А строк очень много, глазами не отследишь.
Может кто владеет тайными знаниями принципа сортировки SQL Server-а в случае, когда явная сортировка отсутствует, и таблица создавалась как описано выше?
29 июл 11, 22:04    [11047332]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
если очень надо, то можно взять тул вроде http://internalsviewer.codeplex.com/ - и юзать до просветления
29 июл 11, 22:12    [11047351]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Kateryne
Но как-то же он определяет, в каком порядке их выводить...
В порядке физической обработки.
Как правило, получается в порядке кластерного индекса или в порядке физического размещения в файле, но это необязательно.
29 июл 11, 22:16    [11047365]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
А если кластерный индекс на таблице был, но потом его удалили?
29 июл 11, 22:18    [11047369]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
alexeyvg
Kateryne
Но как-то же он определяет, в каком порядке их выводить...
В порядке физической обработки.
Как правило, получается в порядке кластерного индекса или в порядке физического размещения в файле, но это необязательно.


Еще при распараллеливании может один поток встать на блокировке, остальные вперед убегут. Короче, порядок возврата серевером записей недетерминирован, если в таблице более одной записи.
29 июл 11, 22:52    [11047476]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1978
Kateryne
Собственно, сабж.
Сразу поясню проблему: есть таблица, созданная как select field1, field2 into mytable from othertable order by othertable.id
То есть в mytable отсутствует первичный ключ. Потом таблицу othertable удаляют, остается только таблица mytable.
И вот, надо проставить порядок строк в том же порядке, в котором они были в таблице othertable. Операций над mytable не производилось, только select, никаких изменений.

Да, я знаю, что сервер не имеет какой-то постоянно гарантируемой сортировки строк без order by. Но как-то же он определяет, в каком порядке их выводить... А мне надо восстановить порядок вставки, ну или хотя бы попытаться сделать это, другого выхода нет. Это одноразовая процедура, что называется - последняя надежда.
На первый взгляд вроде бы сортировка сохранилась, если просто select без order by сделать. Но было бы очень плохо, если часть строк все же будет не в первоначальном порядке. А строк очень много, глазами не отследишь.
Может кто владеет тайными знаниями принципа сортировки SQL Server-а в случае, когда явная сортировка отсутствует, и таблица создавалась как описано выше?


А что, нельзя создать в mytable field3, куда из othertable писать othertable.id?
29 июл 11, 23:08    [11047546]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
othertable больше нет. :(
29 июл 11, 23:12    [11047561]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Kateryne,

DECLARE @tbl TABLE (field VARCHAR(10))
INSERT INTO @tbl
SELECT '1234' UNION ALL
SELECT '0234' UNION ALL
SELECT '1111' UNION ALL
SELECT '0000'

SELECT * FROM @tbl

SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) rn, * FROM @tbl
Без гарантий.
29 июл 11, 23:27    [11047613]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Верблюд
Еще при распараллеливании может один поток встать на блокировке, остальные вперед убегут. Короче, порядок возврата серевером записей недетерминирован, если в таблице более одной записи.
Это само собой.

Но с некоторой вероятностью, для одноразовой операции, ограничив выполнение одним потоком (хинтом) и сделав предварительное чтение (чтоб всё закешировалось), можно получить искомое...
29 июл 11, 23:43    [11047662]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
а нафига все эти извращения? Почему бы не ввести поле порядок и ORDER BY
Какой то садомазохизм.
30 июл 11, 10:55    [11048172]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Kateryne
А мне надо восстановить порядок вставки, ну или хотя бы попытаться сделать это, другого выхода нет. Это одноразовая процедура, что называется - последняя надежда.

ну очень интересно зачем вам знать порядок вставки? объясните плз
30 июл 11, 11:05    [11048175]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
Потому что мы пытаемся побороть диверсию. Были удалены все поля связи и первичные ключи из важных таблиц. Но раньше мы знаем, что вставлялись данные туда через select into. Если восстановить порядок вставки, то мы восстановим и связи тоже, так как есть зависимость.
30 июл 11, 15:15    [11048388]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Kateryne,
ну если кто-то смог удалить данные и изменить структуру базы, а вы не можете востановить выходит таблицы совсем не важные а так ))
а резервных копий нет разве?
30 июл 11, 15:35    [11048408]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
Это очень важные данные, но их владелец слишком положился на аутсорс-контору, которая занималась и бэкапами и прочим.
Впрочем, это все оффтопик тут :)
30 июл 11, 16:32    [11048489]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Kateryne
Это очень важные данные, но их владелец слишком положился на аутсорс-контору, которая занималась и бэкапами и прочим.
Впрочем, это все оффтопик тут :)


оутсорсеры занимались бэкапами? и куда они их складывали? и договор есть в котором все это указано? в суд пусть подает, если про бэкапы в договоре написано - ущерб материальный + моральный.
31 июл 11, 16:24    [11050059]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Kateryne
Member

Откуда:
Сообщений: 351
С судом все сложно... да и честно говоря, я этих аутсорсеров частично понимаю даже, несмотря на всю некрасивость их поступка, и что в результате больше всего мы страдаем. Там уж крайне своеобразная ситуация. Да и суд в любом случае дело не наше дело, а заказчика, а он на это не пойдет.
Не суть важно, главное что нам надо всю эту ерунду восстановить. :(
31 июл 11, 22:04    [11050538]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Kateryne
Да и суд в любом случае дело заказчика, а он на это не пойдет.


Пусть тогда повторно все заказывает. С самого начала. Раз уж такой лох, то обуйте его по полной еще разок...
1 авг 11, 00:10    [11050807]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
aleks2
Guest
Kateryne
Не суть важно, главное что нам надо всю эту ерунду восстановить. :(

Дык, ежели такое дело, там и неважно... чо за чем следует? Бабки распилили - осталось опилки подмести...
1 авг 11, 06:49    [11051019]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Я так понимаю надо восстановить не столько порюдок вставки, сколько то самое ID ?
Судя по всему Вы надеетесь что порядок вставки был определен "order by othertable.id" ?

К сожалению как тут уже писали выше, это не гарантировано.
Т.е. все что Вы можете, это сделать select * from mytable и надеяться что порядок там тот самый.

А если коротко ответить, то - никак.
1 авг 11, 11:12    [11051763]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Shlippenbaranus
Member

Откуда:
Сообщений: 241
Хи. Насколько я понял, владелец данных кинул аутсорс-контору, а те обиделись, и удалили связи между данными, не тронув собственно данных - на мой взгляд, просто молодцы. Нашли красивое решение. Подозреваю, что по закону им будет сложно что-то предъявить, даже если заказчик захочет.

Для Kateryne - я бы восстановил поля "на удачу", опираясь на предположение о том, что select без order by вернет строки в порядке их вставки, потом построил бы запросы, выявляющие возможные конфликты, разобрал бы конфликты вручную, потом бы наложил ограничения целостности. Если конфликтов будет много, а задницу жжет - ну, попытался бы запустить систему частично, удалив конфликтующие данные, а потом, по мере ручного разбора, пытался бы их добавлять.

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

А для заказчика - не ссорься с программистами, козел!
2 авг 11, 11:50    [11057630]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Shlippenbaranus,

а что такое "связи между данными"? Как их можно удалить, не трогая данные?
2 авг 11, 12:09    [11057796]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Shlippenbaranus
Member

Откуда:
Сообщений: 241
iap
Shlippenbaranus,

а что такое "связи между данными"? Как их можно удалить, не трогая данные?


Для Вас, как в общем-то и для меня, первичный и вторичный ключ - это, естественно, данные. Больше того, на уровне эмоций и для меня лично в паре (id, value) id - это данные, а value - мусор, вводимый end-юзером :). Но для end-юзера "данные" - value, тогда как id - крокозябра. И я не удивлюсь, если вчитавшись в законы, мы обнаружим, что они написаны именно с позиции end-юзера. Так что решение, найденное обиженными аутсорсерами, вызывает некоторый интерес :).
2 авг 11, 12:21    [11057942]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Shlippenbaranus, без резервной копии (для себя и страховки) аутсорсеры врядли такое сделали. Значит рано или поздно заказчик всеже денег даст. Это если опустить морально-этические подоплеки истории. ТС лучше всего обосновать бессмысленность и нецелесообразность попыток востановить связи в СУБД по звездам.
2 авг 11, 12:31    [11058023]     Ответить | Цитировать Сообщить модератору
 Re: По какому принципу SQL Server сортирует строки без order by? Шансы повтора.  [new]
Shlippenbaranus
Member

Откуда:
Сообщений: 241
kDnZP
ТС лучше всего обосновать бессмысленность и нецелесообразность попыток востановить связи в СУБД по звездам.


Ну, в общем-то да. Если заказчик вменяемый.
2 авг 11, 12:41    [11058100]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить