web-dev-qa-db-fra.com

Comment vider ma table de destination avant d'insérer de nouveaux enregistrements dans SSIS?

J'utilise SSIS pour générer et transformer de nouvelles données pour une utilisation ultérieure dans un nouveau système. J'ai un problème chaque fois que j'exécute mon package SSIS, il continue d'insérer de nouveaux enregistrements dans mes tables de destination.

Comment puis-je d'abord vider ma table de destination (/ OLE DB Destination) puis insérer les enregistrements nouvellement générés?

Actuellement, la solution de contournement pour ce problème effectue une delete from DestTable avant d'exécuter mon package.

21
SamekaTV

Mettez votre instruction de suppression dans un Execute SQL Task. Faites-en ensuite le premier composant de votre flux. Le composant ressemble à ceci:

enter image description here

38
TsSkTo

Créez une tâche d'exécution SQL. Faites-le courir en premier. Pour le sqlstatment faire.

Truncate table DestTable

Il est préférable d'utiliser la table tronquée que d'utiliser la suppression car elle ignore tous les index et supprime tout simplement.

Pour un peu d'informations de fond. Je vais essayer d'expliquer pourquoi vous devez utiliser la table tronquée au lieu de la supprimer. La suppression de table est une opération basée sur les lignes, cela signifie que chaque ligne est supprimée. La table tronquée est une opération de page de données dont la page de données entière est délocalisée. Si vous avez une table avec un million de lignes, il sera beaucoup plus rapide de tronquer la table que d'utiliser un état de suppression de table.

30
DaImTo

Une mise en garde sur l'utilisation de la table tronquée, elle fonctionne mieux pour les raisons indiquées. Cependant, il nécessite également des privilèges supplémentaires pour votre compte système SSIS. Vous devez être sûr que ceux-ci sont disponibles dans Production, sinon vous devrez utiliser Supprimer.

Référence MSDN

7
WaitForPete

vous devez utiliser ceci

truncate table table_name

cela vide la table

0
vhadalgi