如何为不同SQL Server Agent作业调用同一SSIS包传递参数?
实现多SQL Server Agent作业调用同一SSIS包并传入不同参数的方案
1. 预处理SSIS包,确保变量可接收外部参数
- 在SSIS包中,找到
Location变量,右键打开属性面板:- 将
EvaluateAsExpression设为False,ReadOnly设为False,允许外部传入值 - 调整包内文件移动逻辑:基于
Location变量从参数表中动态获取对应源文件路径和目标目录。例如编写带参数的SQL查询:SELECT SourceFilePath, TargetDir FROM LocationParams WHERE Location = ?,将Location变量作为查询参数传入,确保仅获取当前Location对应的文件信息,从根源避免交叉处理错误文件
- 将
2. 创建SQL Server Agent作业(以agentjobfirst为例)
- 打开SSMS,展开SQL Server Agent→作业,右键新建作业:
- 常规页:命名为
agentjobfirst,填写描述(如"处理Location=first的文件移动") - 步骤页:新建步骤,步骤类型选择SQL Server Integration Services Package
- 根据包的部署方式配置参数:
- 若包部署在SSIS Catalog:在配置→参数列表中找到
Location,勾选"值"并输入first - 若包为文件系统部署:在命令行中添加参数:
/SET \Package.Variables[User::Location].Properties[Value];"first"
- 若包部署在SSIS Catalog:在配置→参数列表中找到
- 根据包的部署方式配置参数:
- 调度页:按需设置作业的执行时间计划
- 常规页:命名为
3. 复制并修改作业,创建agentjobsecond
- 右键已创建的
agentjobfirst,选择"编写作业脚本为"→"CREATE到"→"新查询编辑器窗口" - 修改脚本中的作业名称为
agentjobsecond,并将参数值从first改为second - 执行脚本完成作业创建,或手动重复步骤2的流程,将
Location参数设为second
4. 验证逻辑正确性
- 手动运行
agentjobfirst,检查是否仅将firstFile移动到drop/first/firstFile.txt - 运行
agentjobsecond,确认仅处理secondFile并移动到drop/second/secondFile.txt,无交叉处理情况
内容的提问来源于stack exchange,提问作者Junsh
相关产品推荐
相关产品推荐

