Как лучше всего обновлять идентификаторы сгенерированных сервером объектов после массовой вставки?

В объектном графе чуть менее миллиона узлов, в основном несвязанных, которые необходимо импортировать массово.

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

Каков самый простой способ сделать это? Есть ли выход из BULK INSERT?

Или может быть хорошо скорректировать текущее значение добавочного идентификатора в таблице, чтобы освободить место для количества строк, которые мы вставляем, назначить идентификаторы на стороне клиента из этих чисел и выполнить массовое копирование с вставкой идентификатора? Например. если следующий инкрементный идентификатор будет равен 120 001 и нужно вставить 600 000 строк, установите для следующего идентификатора значение 720 001 и вручную используйте числа от 120 001 до 720 000 в качестве идентификаторов перед любыми вставками?

declare @lastID int, @newLastID int;

begin tran
    set @lastID = ident_current('dbo.Strains');
    set @newLastID = @lastID + 1000;

    dbcc checkident('dbo.Strains', reseed, @newLastID);
commit

select @lastID + 1;

person jnm2    schedule 19.07.2013    source источник


Ответы (1)


Использование merge..output для получения сопоставления между source.id и target.id

person Sonam    schedule 19.07.2013
comment
Как это позволит мне получить идентификационные ключи из основной таблицы? - person jnm2; 19.07.2013
comment
Прошу прощения, я ответил на этот вопрос, основываясь только на заголовке. Если вы работаете с SQL Server 2008, вы можете использовать слияние и вывод, чтобы получить сопоставление между исходным идентификатором и целевым идентификатором. Я редактирую свой ответ, чтобы включить ссылку на то же самое. - person Sonam; 19.07.2013
comment
Я думаю, что SCOPE_IDENTITY (SQL 2012) поможет вам. вот ссылка: msdn.microsoft.com/en-us/library/ms190315 .aspx - person Sonam; 19.07.2013