clé primaire enregistrement en double dérivation à la prochaine insérer
question étrange. je suis de l'insertion de 10 000 enregistrements dans une table et la clé primaire n'est pas un champ d'Identité. donc, lors de l'insertion de plus de 10 000 si certains sont en double, est-il un moyen pour passer à l'enregistrement suivant dans sql server insérer et de s'assurer que la non-doublons aller dans? je n'ai vraiment pas de soins combat les doublons de ne pas s'insérer.
OriginalL'auteur uirn | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Utiliser la fonction "Ignorer le double de la clé" option.
La façon la plus simple de le faire est de supprimer la Clé Primaire dans SQL Server Management Studio.
Puis créer un nouvel Index de type "Index", Est Unique à "Oui" et réglez la "Ignorer les doubles des Clés" à "Oui". Ensuite, insérez vos dossiers. Il va insérer tous, sauf les doublons. Lorsque vous avez terminé, vous pouvez supprimer cet indice, et de recréer votre Clé Primaire.
Si vous voulez un TSQL méthode, voir l'option IGNORE_DUP_KEY dans la création de l'INDEX d'appel:
CRÉER des INDEX (Transact-SQL)
EDIT:
Un autre moyen serait d'utiliser une JOINTURE GAUCHE entre votre table source et les dossiers que vous allez insérer, et une clause GROUP BY, seulement l'insertion d'enregistrements qui n'existent pas dans votre source. Le GROUPE s'EN va éliminer les doublons dans les nouveaux enregistrements.
La clé primaire serait pas violé, la délinquance enregistrement crée un avertissement sans l'annulation de la totalité de l'instruction bulk insert.
OriginalL'auteur GalacticJello
vous devez définir votre clé primaire d'ignorer les doublons:
L'utilisation de cette option peut nuire à la performance:
Si vos données ont un petit pourcentage de doublons, puis IGNORE_DUP_KEY peut accélérer vos inserts. Pour de plus grandes quantités de doublons, IGNORE_DUP_KEY peut ralentir de manière significative. J'ai mis en place deux tables, décapage tous les détails inutiles, comme suit:
Si les données entrantes avait pas de doublons, la performance de deux inserts était toujours la même:
(Notez que la dbo. Les numéros de 1 million de lignes.) Bien sûr, j'ai toujours tronquée de deux tables entre mes tests.
Si les données entrantes avait 1% de doublons, l'insert avec IGNORE_DUP_KEY systématiquement effectuée environ 5% plus rapide:
D'autre part, si les données entrantes avait 100% de doublons, l'insert avec IGNORE_DUP_KEY systématiquement effectuée au moins 300% plus lente, à la fois pour un grand ensemble de 2 millions de lignes:
Ainsi que pour un petit ensemble de 200K lignes:
Dans l'ensemble, j'ai décidé de ne pas utiliser IGNORE_DUP_KEY dans mon cas particulier. J'ai décidé que de petites économies, pour une petite quantité de doublons ne justifie pas le risque d'une énorme chute des performances pour les grandes quantités de données en double.
OriginalL'auteur A-K
Cet exemple de requête ignorer les lignes en double par PK1:
OriginalL'auteur dariol
Un couple de façons de printemps à l'esprit, car je ne sais pas quel mécanisme vous êtes en utilisant pour faire l'insertion.
1) chargement en masse tous les enregistrements dans une nouvelle table vide, puis exécutez une INSERTION dans la table réelle à partir de cette mise en scène de la table où le disque n'existe pas déjà dans la table principale.
par exemple,
2) enrouler chaque insérer dans un TRY...CATCH bloc d'avaler le PK erreur de contrainte doit-on arriver (si vous utilisez SQL 2005 ou plus tard).
À l'aide de l'option 1, vous devez ensuite il suffit de tirer un enregistrement par PKField valeur de la table intermédiaire dans la vraie table. par exemple, vous pouvez avoir une colonne d'IDENTITÉ sur la mise en scène de la table, et juste obtenir la première occurrence de chacun de PKField valeur.
OriginalL'auteur AdaTheDev