![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Есть таблица:
ааа bbb ccc ddd fff ggg Например на третью позицию нужно вставить новую строку zzz. Как бы это покрасивее сделать? ![]() Спасибо. |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
Нет такого понятия середина таблицы.
-------------------- Никогда не говори никогда |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Понятие порядка записей существует только после того, как указана сортировка. Если она не указана - порядок следования записей в результирующем наборе не определен. Впрочем, при этом большинство СУБД обычно (но не всегда) выдает записи в порядке их следования в кластерном индексе.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Тоесть, такое не возможно? Жаль :(. Но в принципе, есть же стандартная схема отображения. Тоесть, ты внес данные в некотором порядке, при Селекте без указания сортировки они и будут выведены в таком порядке. Предполагаю, что это благодаря тому же кластерному индексу, о котором упоминал Akina.
Но тогда почему не использовать вариант дополнительной темп. таблицы. Скажем, взять SELECT TOP 2... и вставить во вторую таблицу, потом вставить новую строку... Хм, а как вставить остаток? Да и не перепутаються ли у меня таким образом данные? |
|||
|
||||
LuMee |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
LexRema, если не секрет - а зачем такое надо вообще?
|
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Хм
![]() Это будет переделано, но не сейчас. Я только пришел на этот проект. И кому захочеться вручную удалят нижнюю часть, потом добавлять строку, потом добавлять нижнюю часть ![]() Это сообщение отредактировал(а) LexRema - 8.8.2007, 12:58 |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
так и не над ничего удалять.
Надо установить order при селекте. Т.е. выделить поле по которому будет производиться сортировка и новую запись вставлять с таким значением, что в селекте попадет в середине таблицы. Селект без ордер может выполниться по кластерному индексу, или по порядку pages или ещё каким либо образом это как вздумается MSSQLу. -------------------- Никогда не говори никогда |
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Сори, не понял... |
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Вывод : Нужны дополнительные поля. Без них - невозможно.
Добавляю поле ОРДЕР aaa 1 bbb 2 ccc 3 ddd 4 Вставляю на 3 позицию sss. Как изменить ордер в последующих строках? Наведите код, плз. |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 15 Всего: 35 |
К примеру так:
Это сообщение отредактировал(а) boevik - 8.8.2007, 16:51 -------------------- Никогда не говори никогда |
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Cool!!!
![]() Trick!!!! Но не пойдет :(. Ордер - интежер, и он должен быть последовательным :(. |
|||
|
||||
Anark1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 622 Регистрация: 15.12.2006 Где: RF -> Moscow Репутация: нет Всего: 11 |
В чем проблема? автоинкремент. Или триггер. |
|||
|
||||
LexRema |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
каким образом?
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
C какого перепугу ПОСЛЕДОВАТЕЛЬНЫМ??? Что 1-2-3-4, что 15-123-7563-952364 - порядок вывода при order by получится одинаковым. А вообще для того, что ТЕБЕ надо (хотя я до сих пор так и не понял, за каким собсно), придется организовывать хранение связного списка (т.е. добавить поле - либо PreviousID, либо NextID, либо оба поля). Тогда вывод осуществляется на основе связности, а вставка записи в середину требует (кроме вставки новой записи) дополнительно корректировки предыдущей и/или последующей записей. Правда, у MS SQL нет встроенных средств работы со списками, и все придется организовывать вручную. Если не ошибаюсь, такие средства есть у Оракла.
Надеюсь, ты уже понял, что вставляешь ты в таблицу, а вот в какое именно место таблицы СУБД положит данные - определяется кластерным индексом, а при его отсутствии - его величеством Рандомом. Но в любом случае тебе фиолетово, где данные ЛЕЖАТ - тебя волновать должно где они будут ВЫВЕДЕНЫ на экран или при печати, а это от хранения не зависит, поскольку определяется получением и обработкой. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
LexRema |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
![]() ![]() Таблицу переделывать - нельзя, только можно придумать отдельное средство, которое будет руководствоваться токо этими данными.... Вот в чем горькая правда. Мне просто не нравиться решение, которое делалось раньше :
изврат? ![]() ![]() Будет переделано, но сейчас пока только так...
Да, спасибо, это я понял. Перефразирую задачу - мне фиолетово, на какую позицию вставиться новая строка. Главное, чтоб она вставилась с нужным ордером, а ордера других строк, где [ордер]>=@ордер_новой_строки - инкрементировались на один. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |