2013-11-27 32 views
17

Używam SSIS do generowania i przekształcania nowych danych do późniejszego wykorzystania w nowym systemie. Mam problem za każdym razem, gdy uruchamiam mój pakiet SSIS, ciągle wstawia nowe rekordy do moich tabel docelowych.Jak opróżnić tabelę docelową przed wstawieniem nowych rekordów w SSIS?

Jak mogę najpierw opróżnić moją docelową tabelę (/ OLE DB Destination), a następnie wstawić nowo wygenerowane rekordy?

Obecnie obejście tego problemu polega na wykonaniu delete from DestTable przed uruchomieniem mojego pakietu.

+0

Umieść instrukcję delete w "Wykonaj zadanie SQL". Następnie uczyń go pierwszym składnikiem twojego przepływu. – TsSkTo

+0

Może to być rozwiązanie, które możesz podać jako odpowiedź. – SamekaTV

Odpowiedz

32

Połóż delete w Execute SQL Task. Następnie uczyń go pierwszym składnikiem twojego przepływu. Komponent wygląda mniej więcej tak:

enter image description here

+15

'TRUNCATE TABLE ' jest * dużo * lepsze dla tabel z wieloma wierszami. Nie tylko będzie szybszy, ale nie zapełni dziennika transakcji. Miałem awarię serwera produkcyjnego bazy danych z powodu dziennika transakcji zapełniającego dysk po wykonaniu polecenia "DELETE FROM" na stole z 30 milionami wierszy. – Dan

-2

trzeba użyć tego

truncate table table_name 

to opróżnia stół

+0

Chcę zastosować go w SSIS i przestać używać obejścia – SamekaTV

+0

można umieścić to w zadaniu exe-sql, 'usuń z tabeli' i' skróć tabelę' robi to samo !! –

+3

Naprawdę nie. Są * podobne *, ale jednak różne. Oto link http://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/ – TsSkTo

25

Utwórz zadanie Execute SQL. Najpierw uruchom. Do wykonania sqlstatment.

Truncate table DestTable 

Korzystanie z obciętej tabeli jest lepsze niż użycie polecenia delete, ponieważ ignoruje wszystkie indeksy i po prostu usuwa wszystko.

Aby uzyskać dodatkowe informacje o tle. Postaram się wyjaśnić, dlaczego powinieneś użyć przyciętego stołu zamiast usunąć tabelę. Usunięcie tabeli jest operacją opartą na wierszach, co oznacza, że ​​każdy wiersz jest usuwany. Truncate table to operacja na stronie danych, cała strona danych jest usuwana. Jeśli masz tabelę z milionem wierszy, znacznie szybciej skrócisz tabelę, a wtedy użyjesz tabeli usuwania.

+0

jesteś tego pewien? –

+0

To jak to robię.Jestem pewien, że istnieje wiele różnych sposobów usuwania danych z tabel scenicznych przed ponownym załadowaniem nowych informacji. Każdy ma własny sposób robienia rzeczy. – DaImTo

+2

+1 - Naprawdę nie obchodzi mnie, który z nich jest lepszy. Ale wyjaśnienie, jakie nadałeś prędkości, jest ważne. Ale mam odpowiedź na mój problem, to jest ważne. Możesz zadać pytanie na ten temat [musi być zgodne z regułami przepełnienia stosu] – SamekaTV

4

Jedna uwaga dotycząca używania skróconego tabeli, działa lepiej z podanych powodów. Jednak wymaga to również dodatkowych uprawnień dla konta systemu SSIS. Powinieneś być pewien, że są one dostępne w Production, w przeciwnym razie będziesz musiał użyć Delete.

MSDN Reference