2010-12-07 8 views
0

Les besoins nécessitent une mise à jour et une insertion pour 10 millions d'enregistrements dans Sql Server 2005. J'ai créé une procédure stockée à l'aide de T-SQL. Avons-nous besoin de faire un commit après le processus ci-dessus, disons 10000 enregistrements validés à la fois. Si c'est le cas, comment puis-je écrire une déclaration de validation par exemple tous les 10000 enregistrements. Toutes les idées seraient appréciées.Validation de bloc après mise à jour/insertion pour 10 millions d'enregistrements en cours de traitement

+0

Combien de fois/souvent devez-vous faire cela? – JeffO

+0

Y aura-t-il des lecteurs concurrents de la table que vous voulez éviter de bloquer via l'escalade de verrous? Votre disque de journal des transactions a-t-il beaucoup d'espace? –

Répondre

3

En général, une méthode pour effectuer des suppressions/mises à jour/insertions par lots consiste à utiliser une boucle WHILE. Le modèle que je suis normalement est:

WHILE 1=1 
BEGIN 
INSERT INTO dbo.MyTable 
(field1, field2, field3...) 
SELECT TOP 100000 (field1, field2, field3...) 
FROM dbo.MySourceTableorQuery as S 
WHERE NOT EXISTS (
     SELECT * FROM dbo.SourceTableorQuery as S 
     WHERE s.PrimaryKey = MyTable.PrimaryKey) 
IF @@ROWCOUNT<100000 BREAK; 
END 

Quant à « si vous devez », c'est impossible de répondre sans beaucoup d'autres informations. Quel type de requête est-ce, comment est la structure de la table, combien de temps cela prend-il pour fonctionner actuellement, comment allez-vous pour l'espace disque (vous augmenterez vraiment la taille de tempdb si c'est une seule transaction) insérez-vous dans, etc?

Questions connexes