Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставить новую строку в середину таблицы, нижние строки сдвинуть ниже 
:(
    Опции темы
Akina
Дата 8.8.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(LexRema @  8.8.2007,  20:57 Найти цитируемый пост)
Таблицу переделывать - нельзя, только можно придумать отдельное средство, которое будет руководствоваться токо этими данными.... 

Пожалуйста. Введите отдельную таблицу RecordID-OutputOrder, связывайте ее в запросах с исходной по RecordID и сортируйте по OutputOrder. При этом сделайте OutputOrder = Primary Clustered Index, и тип выберите соответствующий (для менее 64к записей хватит LongInt, если больше, то что-нить типа Text*16, при этом несложно родить такой алгоритм вставки, чтобы в подавляющем большинстве случаев записи предыдущего и последующего значений корректировки не требовали).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 8.8.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(LexRema @  8.8.2007,  19:57 Найти цитируемый пост)
 Но правда также в том, что есть уже некотарая нумерация, которая ведеться не строковыми, а инт значениями. и между 20 и 21 не вставить 201 

Ну почему же не вставить.
Вот пожалуйста
Код

drop table table11
go
create table table11 (
f1 varchar(50),
orderField  int)
go
insert into table11
select 'aaa', 20
union
select 'bbb', 21
union
select 'ccc', 22
union
select 'ddd', 23

go
select * from table11 order by cast(orderField as varchar)
go 
insert into table11
select 'sss', 201
go
select * from table11 order by cast(orderField as varchar)




--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Anark1
Дата 8.8.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Я не понимаю. Что изменится если задать поле orderField как автоинкрементное? Все то же самое, только не придется опасаться за порядок и не писать лишнего кода.
Насколько я знаю в MS SQL есть поддержка auto increment.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
boevik
Дата 9.8.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(Anark1 @  8.8.2007,  21:55 Найти цитируемый пост)
Я не понимаю. Что изменится если задать поле orderField как автоинкрементное? Все то же самое, только не придется опасаться за порядок и не писать лишнего кода.
Насколько я знаю в MS SQL есть поддержка auto increment.

Весь сыр-бор, из за того что надо выводить данные в определенном порядке, а не в порядке добавления в таблицу.
auto increment всегда увеличивает значение вставляемой записи и если сортировать записи по auto increment, то порядок будет соотвествовать порядку добавления записей.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
LexRema
Дата 9.8.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



Код


UPDATE TabelName 
SET N = N+1 WHERE N >=3;
INSERT INTO TableName (Str, N) 
VALUES ('sss', 3);



Вот что мне посоветовали. Несложно, и выполняет поставленую задачу. 

Большое спасибо за время и помощь!
PM   Вверх
boevik
Дата 9.8.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(LexRema @  9.8.2007,  11:40 Найти цитируемый пост)

Код

UPDATE TabelName 
SET N = N+1 WHERE N >=3;
INSERT INTO TableName (Str, N) 
VALUES ('sss', 3);



Вот что мне посоветовали. Несложно, и выполняет поставленую задачу. 

Большое спасибо за время и помощь! 

Действительно, и просто и легко.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 9.8.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(LexRema @  9.8.2007,  12:40 Найти цитируемый пост)
Вот что мне посоветовали. Несложно, и выполняет поставленую задачу. 

Пока количество записей ограничивается тысячами - это возможно. Но если записей будет сотни тысяч и более, а особенно если имеется индекс по N (и не приведи господи составной) - вселенские тормоза гарантированы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LexRema
Дата 9.8.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



Тысяча там не скоро возникнет. Спасибо за беспокойство.

Ща новый вопрос возник. 
Скриптую базу.... Как -то можно попросить сервер, чтобы он файлики (так как я скриптую обьекты по отдельным файлам), как то нумеровал? 
Ну, в смысле, логически нумеровал. 
Тоесть, есть одна какая-то УДФ1. она использует другую УДФ2. Так можно ли как то сервер попросить, чтобы он нумеровал вторую первой? Тоесть файлы были например:

1dbo.УДФ2.udf
2dbo.УДФ1.udf

З.Ы. Если при развертывании базы сначала запустить скрипт УДФ1, то так как она ссылаеться на другую, создана не будет. 
Может другие пути обхода? Например, как-то отключить проверку на правильность и целосность...

Лучше, создам я новую тему.

Это сообщение отредактировал(а) LexRema - 9.8.2007, 18:35
PM   Вверх
SergKO
Дата 11.8.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Цитата(LexRema @  9.8.2007,  17:38 Найти цитируемый пост)
Тысяча там не скоро возникнет. Спасибо за беспокойство.
 Правильно, зачем думать сегодня? Пусть лучше кто-нибудь завтра ломает голову и исправляет. Кто-то, не думая вчера, уже создал таблицу, с которой Вы "мучаетесь" сегодня.
Прислушайтесь к Akina, он предложил вполне приемлемое решение и подсказал, что ожидает вас завтра, если использовать 
Цитата(LexRema @  9.8.2007,  11:40 Найти цитируемый пост)
Вот что мне посоветовали


PM MAIL   Вверх
LexRema
Дата 22.8.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



Даже если нескоро означает срок около 20 лет smile

В любом случае, это был временный механизм. Он будет переделан в ближайшем будущем.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1308 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.