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

Откуда:
Сообщений: 7868
Блог
Всем привет.

Нужно вставить большое количество записей в таблицу с автоинкрементным идентификатором, думаю порезать по тысяче на инсерт. Но помимо этого, нужно как-то получить идентификаторы вставленных записей.
Одна из мыслей - брать последний идентификатор и отсчитывать от него тысячу, для получения всех идентификаторов. Но это возможно только в том случае, если все записи в одном инсерте лягут последовательно.
Дело в том, что подобные операции будут идти с большого количества рабочих мест на одну базейку и если для каждой вставки поле вычисляется отдельно, значит подобный вариант нельзя рассматривать.
Если кто сталкивался, либо знает возможные варианты получения идентификаторов после массовой вставки данных, буду признателен за ответ)
21 окт 12, 17:30    [13352622]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Помнится, последний раз я высказывал своё мнение по этому вопросу вот здесь:
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=213289&msg=13103340
21 окт 12, 17:51    [13352665]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
Мне такое помогло:
-- Логирование вызова процедуры (начало):

declare [b]@RowNumTable[/b] table (RowNum bigint null); /* Типа, это табличка идентификаторов */
-- прочая финя ....
insert into LOG_A_POTBOR_Partia_Min_Srok (_ID_SCLAD, _ARTICUL, _KOLVO, _MaloTovar, _S50p, _S75p, _S100p) 
  output inserted.RowNum into @RowNumTable /* списот номеров, которые вставились за данный проход */
  select   @ID_SCLAD,  @ARTICUL,  @KOLVO,  @MaloTovar,  @S50p,  @S75p,  @S100p ;
-- прочая фигня ...
-- Логирование вызова процедуры (конец).
21 окт 12, 18:14    [13352719]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
Читатель неместный
Guest
не могу переварить слишком серъезные весчи
по мне так и так пойдет
как узнать идентификатор новой записи после импорта

оттуда
use tempdb
go

create table #testtable (id int identity(1, 1), value nvarchar(255));
create table #inserted (id int);
insert into #testtable (value)
output inserted.id into #inserted
values('test1'), ('test2'), ('test3');
select * from #inserted;
drop table #testtable;
drop table #inserted;

хотя и говорят старики
Mnior
3. А если ты вставляешь N строк то уже хамба, OUTPUT тут не катит
оно работает
...по крайней мере в 2005м
21 окт 12, 18:15    [13352725]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Читатель неместный
не могу переварить слишком серъезные весчи
по мне так и так пойдет
как узнать идентификатор новой записи после импорта

оттуда
use tempdb
go

create table #testtable (id int identity(1, 1), value nvarchar(255));
create table #inserted (id int);
insert into #testtable (value)
output inserted.id into #inserted
values('test1'), ('test2'), ('test3');
select * from #inserted;
drop table #testtable;
drop table #inserted;

хотя и говорят старики
Mnior
3. А если ты вставляешь N строк то уже хамба, OUTPUT тут не катит
оно работает
...по крайней мере в 2005м
Не работает, если есть триггер INSTEAD OF INSERT
21 окт 12, 18:17    [13352731]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
Читатель неместный
Guest
ну так
не могу переварить слишком серъезные весчи
Если уж пользуют instead триггера... то от них тяжело отказаться.
Ну там и можно замутить автоинкремент самопальный.
Как рядовой девелопер скажу - нафик оно нужно это "автоинкрементный идентификатор" !
21 окт 12, 18:33    [13352796]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
Читатель неместный
ну так
не могу переварить слишком серъезные весчи
Если уж пользуют instead триггера... то от них тяжело отказаться.
Ну там и можно замутить автоинкремент самопальный.
Как рядовой девелопер скажу - нафик оно нужно это "автоинкрементный идентификатор" !


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

PS БЕЗДУМНОЕ порождение своих многочисленных идентификаторов, БЕЗДУМНОЕ пользование инстедоф-тригеров ширит рынок и растит зарплаты. Тока вот чо-та вокруг один говнокод :( ...

Изините, 6ля, неудержался...
21 окт 12, 21:22    [13353326]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
Читатель неместный
Guest
да да!!
...нефиг говнокодить
ну и админов на сиквел сервер тоже нефиг держать...таких
instead лучше after
21 окт 12, 22:35    [13353534]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
Читатель неместный
да да!!
...нефиг говнокодить
ну и админов на сиквел сервер тоже нефиг держать...таких
instead лучше after

Вот гад!
Прям "не в бровь а в глаз",- ... вот теперь завтра пойду на работу собирать шмотки и писать "по собственному"...
22 окт 12, 00:17    [13353894]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
Хнык
Member

Откуда:
Сообщений: 7868
Блог
В виду того, что используется bigint в качестве идентификатора и ограничения на тысячу кортежей в инсерте, сделал сиквенс с шагом в тысячу и использую константу + порядковый номер кортежа для вставки при генерации запроса.
23 окт 12, 16:26    [13363819]     Ответить | Цитировать Сообщить модератору
 Re: Получить идентификаторы вставленных записей  [new]
Хнык
Member

Откуда:
Сообщений: 7868
Блог
Всем спасибо.
23 окт 12, 16:27    [13363835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить