我有一个包含2个字段的表人。在我的另一个数据库中,我有一个参与者表(也有2列)。参与者表我必须在人员表中插入值。 但在每次插入之前,我都希望截断人员表。
我已经尝试将Execute Sql任务链接到数据流任务。但是它显示出存在主外键关系的错误。
答案 0 :(得分:6)
如果我理解正确,SSIS与您的实际问题无关,即您希望截断由外键约束引用的表。这个问题已经回答:Cannot truncate table because it is being referenced by a FOREIGN KEY constraint?
答案 1 :(得分:4)
如果sql server中的表具有外键引用,则无法截断。而是在执行sql任务中使用delete而不使用where子句。
delete from person_table
如果您真的坚持要截断表,可以删除外键约束,然后截断表,然后重新创建外键约束。当然,提供运行包的用户具有这样做的权限。
答案 2 :(得分:1)
创建“执行SQl”任务并运行DELETE FROM person
完成此任务后,运行导入。
DELETE FROM
将给出与TRUNCATE TABLE
相同的结果,但如果表中有一个指向它的外键,则它不能被截断。您必须使用删除命令
答案 3 :(得分:0)
除非启用级联删除(或首先删除子记录),否则您将无法删除。为什么这是一个问题,为什么我不能做我想做的事情?因为如果这样做,您可能会失去数据的完整性。假设我在table2中有与表1中的记录相关的记录。进一步假设table1具有自动生成的id。如果我可以截断该表,那么我将那些记录中的记录留下来,没有任何记录来引用它们,它们已经成为孤儿。好吧,但我把数据放回你说。但随后他们会有新的身份证号码,你仍然会失去相关数据的相关性。
您可以删除FK并截断并插入并重新创建FK。是的,你可以,但这是一个糟糕的做法,你不应该除非你也在重新创建那些相关的记录。
最佳做法是根据您的需要使用MERGE语句进行更新或插入。
答案 4 :(得分:0)