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

Tas*_*sto 22 database sql-server ssis relational-database

我使用SSIS生成和转换新数据,以便以后在新系统中使用.每次运行我的SSIS包时都会出现问题,它会不断地将新记录插入到我的目标表中.

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

目前,此问题的解决方法是delete from DestTable在运行我的包之前执行.

TsS*_*kTo 39

将删除语句放入Execute SQL Task.然后将它作为流程的第一个组成部分.该组件看起来像这样:

在此输入图像描述

  • `TRUNCATE TABLE <name>`对于有很多行的表来说更好*.它不仅会更快,而且不会填满事务日志.我有一个生产数据库服务器崩溃,因为在一个有3000万行的表上执行`DELETE FROM`命令后,事​​务日志填满了磁盘. (23认同)

DaI*_*mTo 30

创建执行SQL任务.让它先运行.对于sqlstatment来做.

Truncate table DestTable
Run Code Online (Sandbox Code Playgroud)

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

有一点背景信息.我将尝试解释为什么你应该使用truncate table而不是delete table.删除表是基于行的操作,这意味着每行都被删除.截断表是一个数据页操作,整个数据页被分离.如果你有一个包含一百万行的表,那么截断表会快得多,那就是使用删除表的状态.

  • +1 - 我真的不在乎哪一个更好.但是你对速度的解释很重要.但我得到了我的问题的答案,这是重要的.你可以问这个问题[必须根据Stack Overflow规则] (3认同)

小智 7

关于使用Truncate表的一个警告,它确实运行得更好.但是,它还需要您的SSIS系统帐户的其他权限.您应该确保在生产中可以使用这些,否则您将不得不使用删除.

MSDN参考