SQL Server的SSIS调度器是否支持运行Access查询、报表及执行宏
关于SSIS调度Access相关任务的问题解答
1. SSIS调度器是否支持运行Access查询和报表
支持,但需要满足对应前置条件:
- 运行SSIS包的服务器必须安装Microsoft Access Database Engine,安装版本的位数必须和SSIS运行环境的位数一致,避免32位/64位不兼容导致的调用失败
- 执行Access查询可以直接使用SSIS内置的
OLE DB源组件,配置Access连接管理器指向目标mdb/accdb文件,即可直接调用文件内置的查询 - 执行Access报表需要通过Script Task或进程调用的方式拉起Access程序执行,需要提前配置好DCOM权限,保证SSIS运行的服务账号有权限启动Access进程
2. SSIS Script Task是否支持执行Access文件内置宏
支持,核心实现逻辑是在Script Task中通过COM互操作调用Access对象模型执行宏,C#语言的核心示例代码如下:
using Microsoft.Office.Interop.Access; using System.Runtime.InteropServices; // 宏执行逻辑 Application accessApp = new Application(); // 打开目标Access文件,第二个参数为是否独占打开 accessApp.OpenCurrentDatabase(@"D:\你的Access文件路径.accdb", false); // 执行指定名称的宏 accessApp.Run("目标宏名称"); // 执行完成后清理资源 accessApp.CloseCurrentDatabase(); accessApp.Quit(); Marshal.ReleaseComObject(accessApp);
需要注意以下限制:
- 服务器必须安装对应版本的Access或Access运行时,且Script Task的运行位数要和Access安装包的位数匹配
- SSIS运行的服务账号需要有Access文件的读写权限,以及Access COM对象的启动权限
- 提前将Access文件所在路径加入Access的受信任位置,调低宏安全级别,避免执行时弹出安全拦截窗口导致任务卡死
- 执行完成后必须显式释放COM对象,避免Access进程残留占用目标文件
内容的提问来源于stack exchange,提问作者Robert Sebas
相关产品推荐
相关产品推荐

