如何在SSIS中基于RecordSet执行单条DELETE FROM语句批量删除数据?
不用拼接字符串实现批量删除的SSIS方案
方案1:临时表关联删除(无需脚本拼接)
- 用Execute SQL Task创建本地临时表,结构匹配CSV的
id列:CREATE TABLE #TempIDs (id INT); - 新增数据流任务,将CSV中的
id数据直接写入这个临时表(用OLE DB Destination,目标选择临时表)。 - 再添加Execute SQL Task,执行关联删除语句:
注意保持全程使用同一个OLE DB连接管理器,临时表会在连接上下文内共享,无需额外拼接操作。DELETE FROM YourTargetTable WHERE id IN (SELECT id FROM #TempIDs);
方案2:SQL Server表值参数(TVP,高效无拼接)
若你的数据库是SQL Server,这是更优雅的实现方式:
- 在SQL Server中创建自定义表类型,匹配
id列类型:CREATE TYPE IDList AS TABLE (id INT); - 在SSIS中创建Object类型变量(比如
User::IDRecordSet),通过数据流将CSV数据加载到该RecordSet变量中。 - 配置Execute SQL Task:
- 连接管理器选择你的SQL Server连接,将连接的
RetainSameConnection属性设为True - SQL语句填写:
DELETE FROM YourTargetTable WHERE id IN (SELECT id FROM ?); - 进入“参数映射”,将
User::IDRecordSet变量映射到参数,参数名称设为0,数据类型选SQL_VARIANT,方向为Input - 常规选项卡中,将“ResultSet”设为
None
- 连接管理器选择你的SQL Server连接,将连接的
以上两种方案均无需编写C#脚本或手动拼接IN子句字符串,完全依托SSIS内置组件实现,符合你学习SSIS用法的需求。
内容的提问来源于stack exchange,提问作者RedAero
相关产品推荐
相关产品推荐

