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

Откуда:
Сообщений: 66
мне нужно отсортировать записи в таблиице в определенном порядке
то есть, - есть таблица (one), мне нужно
- отсортировать ее записи,
- сохранить под другим именем (two),
- удалить первый вариант (неотсортированный) этой таблицы (one)
- переименовать таблицу (two) в (one)
и чтобы при этом все ограничения,триггеры и связи (one) сохранились
буду очень благодарна за вашу помощь
23 апр 05, 07:18    [1491997]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
@ndrey
Member

Откуда: Novosibirsk
Сообщений: 343
автор
- отсортировать ее записи,
- сохранить под другим именем (two),
- удалить первый вариант (неотсортированный) этой таблицы (one)
- переименовать таблицу (two) в (one)
и чтобы при этом все ограничения,триггеры и связи (one) сохранились

А зачем столько мороки?
Не проще при выводе таблицы использовать order by?
или ввести поле int и пронумировать все записи в том порядке как вам нужно
;)
23 апр 05, 07:47    [1492004]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
aleks2
Guest
1) Нет никакого смысла сортировать записи ибо...

2) Но если очень хочется:
2.1) Удаляешь кластерный индекс на таблице.
2.2) Создаешь кластерный индекс по полям желаемой сортировки в желаемом порядке.
---------------
BACKUP is ultimately recommended...
см. BOL: CREATE CLUSTERED INDEX

CLUSTERED

Creates an object where the physical order of rows is the same as the indexed order of the rows, and the bottom (leaf) level of the clustered index contains the actual data rows. A table or view is allowed one clustered index at a time.

A view with a clustered index is called an indexed view. A unique clustered index must be created on a view before any other indexes can be defined on the same view.

Create the clustered index before creating any nonclustered indexes. Existing nonclustered indexes on tables are rebuilt when a clustered index is created.

If CLUSTERED is not specified, a nonclustered index is created.
23 апр 05, 07:50    [1492006]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
m_a_r_i_n_a
Member

Откуда:
Сообщений: 426
@ndrey
[quot автор]- отсортировать ее записи,
Не проще при выводе таблицы использовать order by?
или ввести поле int и пронумировать все записи в том порядке как вам нужно
;)

дело в том, что программа купленная, и если даже использовать order by при очередном патче программы нужно будет каждый раз этот order by в selecte ставить
нет ли другого способа?
23 апр 05, 09:17    [1492035]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
m_a_r_i_n_a
Member

Откуда:
Сообщений: 426
<2) Но если очень хочется:
2.1) Удаляешь кластерный индекс на таблице.
2.2) Создаешь кластерный индекс по полям желаемой сортировки в желаемом порядке.>
а вот как бы это сделать, чтобы не нарушить никакие связи этой таблицы с другими?
используя ваш совет, я собираюсь это делать на копии базы в 2 шага
- drop index ...
- create clustered index ...
и все
Это будет правильно, как вы считаете ?
спасибо за помощь
23 апр 05, 09:22    [1492040]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
m_a_r_i_n_a
<2) Но если очень хочется:
2.1) Удаляешь кластерный индекс на таблице.
2.2) Создаешь кластерный индекс по полям желаемой сортировки в желаемом порядке.>
а вот как бы это сделать, чтобы не нарушить никакие связи этой таблицы с другими?
используя ваш совет, я собираюсь это делать на копии базы в 2 шага
- drop index ...
- create clustered index ...
и все
Это будет правильно, как вы считаете ?
спасибо за помощь

При кластерном индексе он их физически отсортирует, т.е. перестроит в соответствии со структурой индекса.
23 апр 05, 09:42    [1492050]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
P.S. А это не всегда есть хорошо.
23 апр 05, 09:48    [1492058]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
м_а_р_и_н_а
Member

Откуда:
Сообщений: 66
НИЧЕГО НЕ ПОЛУЧАЕТСЯ

на этой таблице есть индекс, но он некластерный и не на тех полях, которые мне нужны
если я сейчас нарушу этот индекс, построив его по-своему, в других местах программы, где используется этот индекс, получится ерунда, поэтому я и хотела пересоздать порядок в самой таблице, а потом уже на ней drop/create существующий в базе индекс
Есть ли какой-ниб способ сделать это ?
23 апр 05, 09:55    [1492066]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
м_а_р_и_н_а
НИЧЕГО НЕ ПОЛУЧАЕТСЯ

на этой таблице есть индекс, но он некластерный и не на тех полях, которые мне нужны
если я сейчас нарушу этот индекс, построив его по-своему, в других местах программы, где используется этот индекс, получится ерунда, поэтому я и хотела пересоздать порядок в самой таблице, а потом уже на ней drop/create существующий в базе индекс
Есть ли какой-ниб способ сделать это ?


Сильно сомневаюсь, что программа вообще знает об этом индексе :)

Просто попробуйте (предварительно сделав копию) Но если в программе все запросы снабжены соотв ORDER BY - возня с перестройкой индексов - бессмысленна
23 апр 05, 11:03    [1492110]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
Порядок вывода записей, если не используется ORDER BY не определен, может быть любой если по какой то причине сервер тебе выдаст отсортированый порядок это только случайность, особенность сервера.
23 апр 05, 12:35    [1492197]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
m_a_r_i_n_a
Member

Откуда:
Сообщений: 426
<Порядок вывода записей, если не используется ORDER BY не определен, может быть любой >
вот я и хочу отсортировать записи в таком порядке, какой мне нужен, только нужно сделать именно по такому алгоритму, как я описала в 1 сообщении.
Тогда именно в этом случае я не буду создавать дополнительных индексов на самой (уже отсортированной) таблице и не буду в selecte писать order by :)
23 апр 05, 12:56    [1492209]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
m_a_r_i_n_a
<Порядок вывода записей, если не используется ORDER BY не определен, может быть любой >
вот я и хочу отсортировать записи в таком порядке, какой мне нужен, только нужно сделать именно по такому алгоритму, как я описала в 1 сообщении.
Тогда именно в этом случае я не буду создавать дополнительных индексов на самой (уже отсортированной) таблице и не буду в selecte писать order by :)


Чем вас напрягает Order by в select? А если вдруг станет надо например не по возрастанию а по убыванию отсортировать? А если часть записей удалили - а потом по необходимости востановили = опять перестраивать станете? Надо искать не самый простой подход на данном этапе - а самый правильный!!!
23 апр 05, 13:20    [1492228]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
а кода одному надо по возрастанию а другому по убыванию?
23 апр 05, 13:21    [1492229]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
Фанат MS SQL
Guest
м_а_р_и_н_а
вот я и хочу отсортировать записи в таком порядке, какой мне нужен, только нужно сделать именно по такому алгоритму, как я описала в 1 сообщении.
Тогда именно в этом случае я не буду создавать дополнительных индексов на самой (уже отсортированной) таблице и не буду в selecte писать order by :)
Вы поймите, что хранение данных в нужном вам порядке не гарантирует получение данных именно в этом порядке при выборках. Даже в случае простейших запросов типа select * from MyTable, не говоря уже о сложных запросах с кучей джойнов. Единственный способ гарантированного получения нужной сортировки -- использование order by.
23 апр 05, 14:08    [1492270]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
m_a_r_i_n_a
Member

Откуда:
Сообщений: 426
дело в другом ...
купили программу, делали заливку данных в ее базу,
в инструкции не было написано, что данные нужно отсортировать, а потом ложить, а в самой программе этой сортировки нет
теперь 2 выхода
- или удалять таблицы (болшой объем) из этой базы, что непросто, и ложить заново
- отсортировать одну единственную таблицу в самой базе
так как исходников программы у нас нет, то переписывать внутренние select ы я не могу
23 апр 05, 14:47    [1492299]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
m_a_r_i_n_a
дело в другом ...
купили программу, делали заливку данных в ее базу,
в инструкции не было написано, что данные нужно отсортировать, а потом ложить, а в самой программе этой сортировки нет

Похоже вам авторы лапши на уши навешали. Прочитай еще раз что выше написано про физический порядок записей. Просто нет такого понятия для SQL
23 апр 05, 14:59    [1492307]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
Dmitry Novikov
Member

Откуда: Nizhny Novgorod
Сообщений: 139
м_а_р_и_н_а
НИЧЕГО НЕ ПОЛУЧАЕТСЯ

на этой таблице есть индекс, но он некластерный и не на тех полях, которые мне нужны
если я сейчас нарушу этот индекс, построив его по-своему, в других местах программы, где используется этот индекс, получится ерунда, поэтому я и хотела пересоздать порядок в самой таблице, а потом уже на ней drop/create существующий в базе индекс
Есть ли какой-ниб способ сделать это ?
Ну и что, что есть индекс (тем более некластерный). Никто не мешает создать столько индексов, сколько душе угодно. Создайте кластерный индекс с нужными полями и сортировкой, и будет Вам счастье. На самом деле счастья не будет, а будет исполнение Вашего желания, работы же программы нужным Вам образом гарантировать нельзя. Пинайте разработчиков (как ни противно мне это говорить, ибо частенько требования заказчиков изрядно достают. Если бы их извращения ограничивались сортировками...), вставить order by в одном месте (или в паре мест) секундное дело.
23 апр 05, 15:27    [1492330]     Ответить | Цитировать Сообщить модератору
 Re: сортировка записей  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
m_a_r_i_n_a

теперь 2 выхода
- или удалять таблицы (болшой объем) из этой базы, что непросто, и ложить заново
- отсортировать одну единственную таблицу в самой базе
так как исходников программы у нас нет, то переписывать внутренние select ы я не могу


1) не ложить а класть
2) вы уверены что логика не в ХП а зашита намертво в код?
23 апр 05, 16:11    [1492351]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить