2012-03-23 75 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