Sql server 如何在SSIS中插入新记录之前清空目标表?

Sql server 如何在SSIS中插入新记录之前清空目标表?,sql-server,database,ssis,relational-database,Sql Server,Database,Ssis,Relational Database,我使用SSI生成和转换新数据,以便以后在新系统中使用。每次运行SSIS包时,我都会遇到一个问题,它会不断向目标表插入新记录 如何先清空目标表(/OLE DB destination),然后插入新生成的记录 当前解决此问题的方法是在运行我的程序包之前执行从DestTable中删除的。您需要使用此选项 truncate table table_name 这将清空表将delete语句放入执行SQL任务。然后将其作为流程的第一部分。组件的外观如下所示: 创建一个执行SQL任务。让它先运行。对于sqls

我使用SSI生成和转换新数据,以便以后在新系统中使用。每次运行SSIS包时,我都会遇到一个问题,它会不断向目标表插入新记录

如何先清空目标表(/OLE DB destination),然后插入新生成的记录

当前解决此问题的方法是在运行我的程序包之前执行从DestTable中删除的

您需要使用此选项

truncate table table_name

这将清空表

将delete语句放入
执行SQL任务
。然后将其作为流程的第一部分。组件的外观如下所示:


创建一个执行SQL任务。让它先运行。对于sqlstatment,请执行以下操作

Truncate table DestTable
使用truncate table比使用delete更好,因为它忽略了所有索引,只是删除了所有内容


了解一些背景信息。我将尝试解释为什么应该使用truncate table而不是delete table。“删除表”是基于行的操作,这意味着删除每一行。Truncate table是一种数据页操作,整个数据页都是分散的。如果您有一个有一百万行的表,那么截断该表的速度会快得多,而使用delete table语句则会快得多

关于使用Truncate table的一个警告是,出于上述原因,它确实运行得更好。但是,它还要求您的SSIS系统帐户具有其他权限。 您应该确保这些在生产中可用,否则您将不得不使用Delete


将delete语句放在
执行SQL任务中
。然后将其作为流程的第一个组件。它可能是解决方案,您可以将其作为答案给出。您可以将其放入exe sql任务中,
从表中删除
截断表
执行相同的操作!!他们真的没有。它们是相似的,但不同。这里有一个链接,感谢截断表和删除表不是一回事。他们可能会做同样的事情,但这并不意味着他们是一样的。Truncate table速度更快,如果您想删除表中的所有内容,为什么不执行最快的操作呢?我知道它们执行相同的操作,但它们完全不同!!你确定吗?我就是这么做的。我确信在重新加载新信息之前,有很多不同的方法可以从stageing表中删除数据。每个人都有自己的做事方式。我真的不在乎哪一种更好。但是你对速度的解释很重要。但我找到了问题的答案,这才是最重要的。您可以就此提出一个问题[必须根据堆栈溢出规则]
TRUNCATE TABLE
更适合于具有多行的表。它不仅会更快,而且不会填满事务日志。在对一个有3000万行的表执行
DELETE FROM
命令后,由于事务日志填满了磁盘,生产数据库服务器崩溃。