2012-03-23 74 views
1

我有一個包含2個字段的Person Person。在我的另一個數據庫中,我有一個Participant Table(也有2列)。從Participant Table中我必須插入值人表。 但在每次插入之前,我想截斷人員表格。TRUNCATE TABLE查詢無法在SSIS中因外鍵執行

我試着將Execute Sql任務鏈接到數據流任務。但它顯示錯誤,表示主鍵存在外鍵關係。

+0

顯示查詢請 – 2012-03-23 07:30:25

+0

截斷表的人---這是寫在執行SQL task.This SQL任務鏈接與數據流任務是用於插入數據b/w參與者表到人員表 – 2012-03-23 07:39:34

+1

可能重複的[無法截斷表,因爲它正在引用FOREIGN KEY約束?](http://stackoverflow.com/questions/253849/can-truncate-table-because-it-being-being-being-being-by-a-foreign-key-constraint) – Pondlife 2012-03-23 13:08:13

回答

4

如果sql server中的表有外鍵引用,那麼你不能截斷。而不是在你的執行sql任務中使用沒有where子句的delete。

delete from person_table 

如果你真的堅定的關於截斷表,你可以刪除外鍵約束,然後截斷表,然後重新創建外鍵約束。當然,提供您正在運行軟件包的用戶有權這樣做。

+1

但是我想在插入新的數據之前截斷數據。可以通過從表中刪除而不提供where子句給出與截斷相同的效果,任何人都可以告訴我如何通過SSIS – 2012-03-23 09:06:05

+0

實現這一點。區別在於刪除會導致比截斷更多的日誌記錄。 – rlobban 2012-03-23 16:35:46

1

創建一個「Execute SQl」任務並在此任務後運行DELETE FROM person ,運行導入。

DELETE FROM將給出與TRUNCATE TABLE相同的結果,但是如果表有一個指向它的外鍵,它不能被截斷。您必須使用刪除命令

0

除非級聯刪除處於打開狀態(或者先刪除子記錄),否則您將無法刪除。爲什麼這是你問的問題,爲什麼我不能做我想做的事?因爲如果你這樣做,那麼你可能會失去數據的完整性。假設我在table2中有與表1中記錄相關的記錄。假設進一步table1有一個自動生成的id。如果我可以截斷那張表,那麼我會留下那些沒有任何記錄的記錄來引用它們,它們已經變成孤兒。那麼,但我把數據放回你說。但是,他們將有新的身份證號碼,你仍然會失去與相關數據的關係。

您可以刪除FK並截斷並插入並重新創建FK。是的,你可以,但這是一個不好的做法,你不應該除非你也在重新創建那些相關的記錄。

最佳做法是使用MERGE語句更新或插入,具體取決於您的需要。

0

在SSIS 傳輸SQL Server對象任務設置屬性DeleteFirstTRUEenter image description here