2013-11-27 5 views
17

SSISを使用して、後で新しいシステムで使用するために新しいデータを生成し、変換します。 SSISパッケージを実行するたびに問題が発生し、新しいレコードをターゲットテーブルに挿入し続けます。SSISに新しいレコードを挿入する前に宛先テーブルを空にするには?

先に宛先テーブル(/ OLE DB宛先)を空にしてから新しく生成されたレコードを挿入するにはどうすればよいですか?

現在、この問題の回避策は、パッケージを実行する前にdelete from DestTableを実行しています。

+0

「Execute SQL Task」にあなたのdelete文を入れてください。次に、それをフローの最初のコンポーネントにします。 – TsSkTo

+0

それは解決策かもしれません、あなたは答えとしてそれを与えることができます。 – SamekaTV

答えて

32

を空にするこの

truncate table table_name 

を使用する必要があります。次に、それをフローの最初のコンポーネントにします。コンポーネントは、このようなものになります。

enter image description here

+15

'TRUNCATE TABLE 'は、多くの行を持つテーブルの方がずっと優れています。トランザクションログがいっそう速くなるだけでなく、トランザクションログがいっぱいになりません。私は3000万行のテーブルを持つ 'DELETE FROM'コマンドが実行された後、ディスクをいっぱいにするトランザクションログのために本番データベースサーバがクラッシュしました。 – Dan

-2

あなたは、これがExecute SQL Taskであなたのdelete文を入れてテーブル

+0

SSISでそれを適用し、回避策 – SamekaTV

+0

を使用しない場合は、exe-sqlタスクでこれを入れることができます。 'delete from table'と' truncate table'は同じことをします!! –

+3

彼らは本当にしません。彼らは*類似*ですが、それにもかかわらず異なります。 Heres a link http://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/ – TsSkTo

25

は、SQL実行タスクを作成します。最初に走ってください。 sqlstatmentの場合は。

Truncate table DestTable 

truncateテーブルを使用すると、すべてのインデックスが無視され、すべてが削除されるので、deleteを使用するほうがよくなります。

少し背景情報のために。私は、delete tableの代わりにtruncate tableを使用すべき理由を説明しようとします。テーブルの削除は行ベースの操作です。つまり、各行が削除されます。 Truncate tableは、データページ全体のデータページが削除されるデータページ操作です。 100万行のテーブルがある場合は、テーブルを切り捨てるほうがはるかに高速になります。テーブルの削除が必要になります。

+0

あなたはこれについて確かですか? –

+0

そのやり方。新しい情報を再ロードする前に、ステージングテーブルからデータを削除する方法はたくさんあります。誰もが自分のやる方法を持っています。 – DaImTo

+2

+1 - 私は本当にどちらが良いか気にしません。しかし、あなたがスピードについて与えた説明は重要です。しかし、私は重要なのは私の問題の答えを得ました。あなたはこれについての質問をすることができます[スタックオーバーフロールールに従っている] – SamekaTV

4

Truncateテーブルを使用することについての注意点は、前述の理由によりうまく動作します。ただし、SSISシステムアカウントの追加権限も必要です。 プロダクションで利用できることを確認する必要があります。そうしないと、削除を使用する必要があります。

MSDN Reference

関連する問題