如何通过SSIS包调用存储过程实现跨库多表数据归档?
不需要纠结源和目标的列映射,你的存储过程已经封装了所有归档逻辑(跨库插入多表+删除源数据),直接用SSIS的执行SQL任务就能完成,步骤如下:
创建SSIS包并添加执行SQL任务
打开SQL Server Data Tools(SSDT),新建Integration Services项目,添加一个新的SSIS包,在控制流面板拖入「执行SQL任务」组件。配置执行SQL任务的连接管理器
双击执行SQL任务,在「连接」选项卡中,选择或新建指向数据库A的OLE DB连接管理器(存储过程内部应已处理跨库访问,比如用[数据库B].[dbo].[trans]这种写法),确保连接账号同时拥有数据库A和B的读写权限。设置执行SQL任务的SQL语句
切换到「SQL语句」选项卡,选择「直接输入」,写入调用存储过程的语句:EXEC dbo.你的归档存储过程名;如果存储过程有参数(比如归档日期范围),可在「参数映射」选项卡配置对应参数。
验证存储过程返回值(可选)
你的存储过程成功返回0,可在执行SQL任务的「结果集」选项卡设置为「单行」,添加结果映射:结果名称填0,变量选择新建的Int32类型变量(比如@ReturnValue)。后续可通过「优先约束」或「脚本任务」,根据该变量值判断是否执行后续操作(比如发送执行通知)。测试和调度SSIS包
点击「执行」按钮测试包运行,检查数据库B的目标表是否有数据、数据库A的trans表是否已删除对应数据。测试通过后,将SSIS包部署到SQL Server Integration Services目录,创建SQL代理作业调度执行即可。
不用数据流组件的原因:你的存储过程已经把「取数-插入多表-删源数据」的逻辑完全封装,数据流组件适合逐行处理、转换数据的场景,直接调用存储过程更高效,也避免了列映射的麻烦。
内容的提问来源于stack exchange,提问作者Sandy

