Je déplace des enregistrements d'une base de données à une autre, dans le cadre du processus d'archivage. Je souhaite copier les lignes dans la table de destination, puis supprimer les mêmes lignes de la table source.
Ma question est, quel est le moyen le plus efficace de vérifier si la première insertion a réussi avant de supprimer les lignes.
Mon idée est la suivante, mais je pense qu'il y a une meilleure façon:
@num_records=select count(ID) from Source_Table where (criteria for eligible rows)
insert * into Destination_Table where (criteria for eligible rows)
if ((select count(ID) from Destination_Table where (criteria) )=@numrecords)
delete * from Source_Table where (criteria)
Est-il préférable / possible de le combiner avec la fonction RAISERROR? Je vous remercie!
la source
OUTPUT
clause? Ce n'est pas parce que ce n'est qu'une seule déclaration. Évite également d'avoir à lire deux fois les lignes (et éventuellement à perdre des lignes ajoutées entre la lecture pour l'insertion et la lecture pour la suppression)La façon dont j'ai pensé à faire de l'archivage (ce qui, je suis sûr, n'est pas parfait non plus), consiste à ajouter une colonne de bits à la nouvelle table d'archives comme `` Archivé '' qui aurait la valeur 1 après le transfert réussi d'un enregistrement. Et une fois que vous avez transféré tous les enregistrements, vous pouvez effectuer une opération de suppression tout en recherchant cette valeur de champ «Archivé» de «1», c'est-à-dire True dans la table archivée.
Et je suis d'accord avec Mike sur l'utilisation de Try / Catch.
la source
Essaye ça:
la source