Quelle est la meilleure pratique pour mettre à jour les ID d'entité générés par le serveur après une insertion en bloc?

entity identity-column orm sqlbulkcopy sql-server

Question

Un graphique d'objet contient un peu moins d'un million de nœuds, généralement déconnectés, qui doivent être importés en bloc.

Les clés sont toutes générées par le serveur. Il existe plusieurs niveaux de relations. Par conséquent, après l'insertion de chaque lot, les clés d'identité correctes doivent être extraites pour pouvoir être utilisées comme valeurs de clé étrangère dans le prochain lot.

Quel est le moyen le plus simple de faire cela? Y at-il une sortie de BULK INSERT ?

Ou pourrait-il fonctionner correctement pour ajuster la valeur d'ID incrémentielle actuelle sur la table afin de libérer de l'espace pour le nombre de lignes que nous insérons, attribuer des ID côté client à partir de ces numéros et une copie en bloc avec une insertion d'identité? Par exemple, si l'ID incrémental suivant est 120 001 et qu'il y a 600 000 lignes à insérer, définissez l'ID suivant sur 720 001 et utilisez manuellement les nombres de 120 001 à 720 000 comme ID avant toute insertion?

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;

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi