0

Notre équipe doit insérer une quantité crue de données dans notre base de données SQL Server 2008. Nous recherchons une bonne solution. Nous en avons maintenant trouvé un, mais j'en doute, tout simplement parce qu'il ne me semble pas juste. Donc, je demande ici si cela semble être une bonne solution. Le défi supplémentaire est qu'il s'agit d'une base de données répliquée peer-to-peer sur 4 serveurs! :)Bulkcopy inserts avec DBCC CheckIdent

Imaginez que nous avons 1 million de lignes à insérer

  1. transaction Début
  2. Augmenter la valeur ident actuelle sur une table avec 1 million
  3. Avoir un DataSet/DataTable prêt avec 1 million de lignes et la ids correctes
  4. BulkCopy les données dans la base de données
  5. transaction Commit

Répondre

0

vous ne rencontrerez que des problèmes (pour autant que je puisse voir, il y a peut-être des choses que je néglige!) si la base de données est en ligne et que les utilisateurs peuvent insérer des lignes dans cette table. Augmenter la valeur d'identité pour les nouvelles lignes sur le méta-niveau signifie simplement que la ligne suivante insérée par le système utilisera ce nombre, donc si vous l'augmentez d'un million, cela signifie que vous avez réservé ces nombres à l'avance.

Les colonnes d'identité sont «gentilles» mais ont l'effet secondaire qu'elles ne sont pas transférables. Donc, si vous devez migrer les données vers une autre base de données, réalisez que vous devez ajuster les données insérées pour correspondre à la base de données dans laquelle vous les insérez (car c'est l'étendue des données qui pourrait entrer en collision avec les lignes déjà présentes dans la table).

S'il s'agit d'une affaire ponctuelle, cela pourrait fonctionner. Si vous envisagez de le faire régulièrement, je rechercherais un système de migration de plus haut niveau où vous migreriez les données vers de nouvelles valeurs d'identité ou utiliseriez guid avec NEWSEQUENTIALID() pour obtenir des index vérifiés et des identifiants uniques et transférables. .

Questions connexes