2013-11-27 2 views
17

Ich benutze SSIS, um neue Daten für die spätere Verwendung in einem neuen System zu generieren und zu transformieren. Ich habe ein Problem, jedes Mal, wenn ich mein SSIS-Paket ausführe, fügt es neue Datensätze in meine Zieltabellen ein.Wie kann ich meine Zieltabelle leeren, bevor ich neue Datensätze in SSIS einfüge?

Wie kann ich zuerst meine Zieltabelle (/ OLE DB-Ziel) leeren und dann die neu generierten Datensätze einfügen?

Die Umgehung für dieses Problem führt derzeit eine delete from DestTable vor dem Ausführen meines Pakets.

+0

Setzen Sie Ihre delete-Anweisung in einer 'SQL ausführen Task'. Dann mach es zur ersten Komponente deines Flow. – TsSkTo

+0

Es könnte die Lösung sein, Sie können es als Antwort geben. – SamekaTV

Antwort

32

Legen Sie Ihre delete-Anweisung in einer Execute SQL Task leert. Dann mach es zur ersten Komponente deines Flow. Die Komponente sieht ungefähr so ​​aus:

enter image description here

+15

'TRUNCATE TABLE ' ist * viel * besser für Tabellen mit vielen Zeilen. Es wird nicht nur schneller sein, es wird das Transaktionslog nicht füllen. Ich hatte einen Produktionsdatenbankserver-Absturz aufgrund eines Transaktionsprotokolls, das den Datenträger füllte, nachdem ein Befehl "DELETE FROM" in einer Tabelle mit 30 Millionen Zeilen ausgeführt wurde. – Dan

-2

müssen Sie diese

truncate table table_name 

verwenden, um dies den Tisch

+0

Ich möchte es in SSIS anwenden und aufhören, die Problemumgehung zu verwenden – SamekaTV

+0

Sie können dies in exe-sql Aufgabe setzen, 'delete from table' und' truncate table' tut das gleiche! –

+3

Sie tun es wirklich nicht. Sie sind * ähnlich *, aber trotzdem anders. Heres ein Link http://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/ – TsSkTo

25

eine Task SQL ausführen erstellen. Habe es zuerst gelaufen. Für die SQL-Anweisung tun.

Die Verwendung von truncate table ist besser als die Verwendung von delete, da es alle Indizes ignoriert und nur alles entfernt.

Für ein wenig Hintergrundinfo. Ich werde versuchen zu erklären, warum Sie anstelle von Tabelle löschen Tabelle truncate verwenden sollten. Delete table ist eine zeilenbasierte Operation, dh jede Zeile wird gelöscht. Tabelle abschneiden ist eine Datenseitenoperation, bei der die gesamte Datenseite delokiert wird. Wenn Sie eine Tabelle mit einer Million Zeilen haben, ist es viel schneller, die Tabelle abzuschneiden, als wenn Sie eine Anweisung zur Löschungstabelle verwenden würden.

+0

bist du dir sicher? –

+0

Es ist wie ich es mache.Ich bin mir sicher, dass es viele verschiedene Möglichkeiten gibt, Daten aus Staging-Tabellen zu entfernen, bevor neue Informationen neu geladen werden. Jeder hat seine eigene Art, Dinge zu tun. – DaImTo

+2

+1 - Mir ist es wirklich egal, welches ist besser. Aber die Erklärung, die Sie über die Geschwindigkeit gegeben haben, ist wichtig. Aber ich habe die Antwort für mein Problem, das ist wichtig. Sie können eine Frage dazu stellen [muss gemäß den Stack Overflow-Regeln sein] – SamekaTV

4

Ein Vorbehalt bei der Verwendung von Truncate-Tabelle, es läuft besser aus den angegebenen Gründen. Es erfordert jedoch zusätzliche Berechtigungen für Ihr SSIS-Systemkonto. Sie sollten sicher sein, dass diese Ihnen in der Produktion zur Verfügung stehen, ansonsten müssen Sie Löschen verwenden.

MSDN Reference