powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как при вставке добавлять следующий номер?
18 сообщений из 18, страница 1 из 1
Как при вставке добавлять следующий номер?
    #40090597
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица T1 (ID, Name, RowNum)
делаем в неё вставку из таблицы T2(ID, Name)

Код: sql
1.
2.
insert into T1(ID, Name)
select ID, Name from T2


необходимо чтобы после вставки в T1.RowNum записывался по порядку номер начиная с 1-цы

т.е. например после первой вставки 2-х строк в T1 было так:

Код: sql
1.
2.
3.
ID  Name  RowNum
1   Вася    1
2   Петя    2



а после второй вставки ещё 1 строки было уже так:

Код: sql
1.
2.
3.
4.
ID  Name  RowNum
11   Вася    1
22   Петя    2
33   Саша   3


Сиквенс не хотелось бы использовать, потому что при удалении строк потом будут дырки, т.е. нужно при каждой вставке находить сначала максимальное значение RowNum, прибавлять 1-цу и с неё дальше продолжать нумерацию строк.

Вот как такое написать в инсёрте?
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090643
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

при указанном вами алгоритме "дырки" никуда не денутся. Нумеруйте при запросе, зачем в базе номера хранить.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090649
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

я имел ввиду, что если удаляются последние записи, а потом идёт новая вставка, то при автоинкременте будет дырка.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090675
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
я имел ввиду, что если удаляются последние записи, а потом идёт новая вставка, то при автоинкременте будет дырка.
А если не последние?
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090704
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
verter
я имел ввиду, что если удаляются последние записи, а потом идёт новая вставка, то при автоинкременте будет дырка.
А если не последние?

Об этом он ишо не подумал.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090709
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
alexeyvg
пропущено...
А если не последние?

Об этом он ишо не подумал.
такованебываит (тм)
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090725
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я подумал, про удаление каких то других записей речь не идёт.
условия задачи такие:
нужно при добавлении записей продолжать нумерацию относительно максимального номера, запись с которым существует в таблице на момент вставки.

Было:

1
2
3
4
5

удалили 2,3, после добавили 1 строку, должно получиться так:

1
4
5
6

теперь удаляем 5,6, после добавляем 1 строку, должно получится так:

1
4
5

а не так:

1
4
7
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090734
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
я подумал, про удаление каких то других записей речь не идёт.
условия задачи такие:
нужно при добавлении записей продолжать нумерацию относительно максимального номера, запись с которым существует в таблице на момент вставки.

Было:

1
2
3
4
5

удалили 2,3, после добавили 1 строку, должно получиться так:

1
4
5
6

теперь удаляем 5,6, после добавляем 1 строку, должно получится так:

1
4
5

а не так:

1
4
7


Внимание! Вопрос:

Чем ЭТО отличается от банального IDENTITY?

ЗЫ. Изобретаем непромокаемый порох.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090736
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

1. Такое поведение нужно из эстетических соображений или есть реальная необходимость?
2. Подумали что будет происходить при конкурентной вставке в таблицу?
3. Насколько часто удаляются данные?
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090806
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
verter
я подумал, про удаление каких то других записей речь не идёт.
условия задачи такие:
нужно при добавлении записей продолжать нумерацию относительно максимального номера, запись с которым существует в таблице на момент вставки.

Было:

1
2
3
4
5

удалили 2,3, после добавили 1 строку, должно получиться так:

1
4
5
6

теперь удаляем 5,6, после добавляем 1 строку, должно получится так:

1
4
5

а не так:

1
4
7


Внимание! Вопрос:

Чем ЭТО отличается от банального IDENTITY?

ЗЫ. Изобретаем непромокаемый порох.


Так тем и отличается, что при IDENTITY будет вставлено 7, а не нужные 5
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090807
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
verter,

1. Такое поведение нужно из эстетических соображений или есть реальная необходимость?
2. Подумали что будет происходить при конкурентной вставке в таблицу?
3. Насколько часто удаляются данные?


1. Такое условие задачи
2. Вставка будет исключительно однопользовательская
3. 1 раз в сутки
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090809
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
invm
verter,

1. Такое поведение нужно из эстетических соображений или есть реальная необходимость?
2. Подумали что будет происходить при конкурентной вставке в таблицу?
3. Насколько часто удаляются данные?


1. Такое условие задачи
2. Вставка будет исключительно однопользовательская
3. 1 раз в сутки



insert into tbl(fld, otherField) select isnull(max(fld),0)+1, @ValueForOtherField from tbl WITH (TABLOCK)

PS Постановщик задачи уже готов к вопросу: "Какого х[рен]а я вставлял позавчера свою инфу под цифрой 6, а сегодня под цифрой 6 вообще какая-то левая шняга?!"
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090815
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
aleks222
пропущено...


Внимание! Вопрос:

Чем ЭТО отличается от банального IDENTITY?

ЗЫ. Изобретаем непромокаемый порох.


Так тем и отличается, что при IDENTITY будет вставлено 7, а не нужные 5


Обуйтесь уже на обе ноги.

Либо дырки допустимы и пофиг где они.
Либо нет - и это уже идиотизм.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090837
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
1. Такое условие задачи
2. Вставка будет исключительно однопользовательская
3. 1 раз в сутки
Ну ок

1. Сделать в T1 индекс по RowNum

2.
Код: sql
1.
2.
3.
4.
5.
6.
insert into T1 (ID, Name, RowNum)
select
 ID, Name, isnull(a.RowNum, 0) + row_number() over (order by 1/0)
from
 T2 outer apply
 (select top (1) RowNum from T1 order by RowNum desc) a;
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40090956
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
Так тем и отличается, что при IDENTITY будет вставлено 7, а не нужные 5

Вы перфекционист или боитесь, что когда-то закончатся свободные числа?
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40091004
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типичная ошибка логики. Вы делаете попытку возложить на одно поле две несвязанные и, что главное, несвязываемые, функции.

Первая - то, что собственно делает первичный ключ. Однозначно идентифицировать запись. Сейчас IDENTITY с этим прекрасно справляется. А что дырки - так это даже правильно, потому что однозначная идентификация - она на весь срок жизни таблицы. Обращаю внимание - именно таблицы, а не записи. То, что запись удалена, никак не влияет, и именно поэтому дырка - не только допустимо, но и правильно.

Вторая - это непрерывная нумерация записей. Если хотите, чтобы в таблице присутствовала подобная функция - заводите для неё ещё одно, дополнительное, поле, и для каждой новой записи ищите и подставляйте значение, которое соответствует этой цели. Например, в триггере.
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40091040
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina

Вторая - это непрерывная нумерация записей. Если хотите, чтобы в таблице присутствовала подобная функция - заводите для неё ещё одно, дополнительное, поле, и для каждой новой записи ищите и подставляйте значение, которое соответствует этой цели. Например, в триггере.


О великий гуру! Чего делать с этой "непрерывной нумерацией" при удалении?
...
Рейтинг: 0 / 0
Как при вставке добавлять следующий номер?
    #40091045
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Чего делать с этой "непрерывной нумерацией" при удалении?
Так это не ко мне вопрос. Вариантов явно больше чем один.

Например, перенумеровывать. От фонаря, лишь бы в итоге получить последовательную непрерывную нумерацию от единицы. Ну или переместить записи с наибольшими номерами, заполнив ими появившийся промежуток. Или сдвинуть записи после промежутка, чтобы опять же получить непрерывную нумерацию, и при этом сохранить относительное местоположение. Или НЕ перенумеровывать. Но новые записи вставлять в образовавшиеся промежутки, и только после их заполнения продолжить присоединение к концу списка. Может, можно и ещё что придумать...

При этом единственный, кто может ответить на поставленный вопрос - это собственно автор вопроса. Я-то фиг знает, что ему нужно...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как при вставке добавлять следующий номер?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]