在Automator中以32位模式运行SQL Server Agent作业的方案咨询
绝对可以用PowerShell触发32位的SSIS包执行,这应该是最直接的解决方案,我来给你一步步拆解,同时也提供几个更简便的替代选项:
方案一:PowerShell调用32位SSIS运行器
32位的SSIS执行工具DTExec.exe默认存放在C:\Program Files (x86)\Microsoft SQL Server\XX\DTS\Binn\DTExec.exe,其中XX是你的SQL Server版本号(比如2017对应140,2019对应150,2022对应160,记得替换成自己环境的版本)。
以下是可直接复用的PowerShell脚本示例:
# 替换XX为你的SQL Server版本号,指定32位DTExec路径 $dtExec32Path = "C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\DTExec.exe" # 定义SSIS包路径:文件系统包用File前缀,SSISDB包用Server前缀 $ssisPackage = "File;C:\ETL\MyExcelTargetPackage.dtsx" # 如果是SSISDB包,格式为:"Server;localhost\SQLEXPRESS;SSISDB\ETLProjectFolder\MyProject\MyPackage" # 执行32位DTExec,/X86参数是双重保险(其实调用32位exe本身就会用32位模式) & $dtExec32Path /F $ssisPackage /X86 # 如需配置变量或连接字符串,可添加参数: # & $dtExec32Path /F $ssisPackage /Set \Package.Variables[User::ExcelFilePath].Value;"C:\Data\Output.xlsx" /X86
关键注意事项
- 不需要特意用32位PowerShell运行脚本:只要直接调用32位的
DTExec.exe,不管你用64位还是32位PowerShell,都会启动32位进程执行包,完美适配2007-2010 Excel的32位驱动需求。 - 权限要匹配:运行脚本的账户需要拥有SSIS包的读取权限、Excel目标文件的读写权限,以及SQL Server(如果包关联了数据库)的访问权限,和之前SQL Agent Job使用的权限保持一致即可。
方案二:更简便的批处理文件
如果觉得写PowerShell脚本有点繁琐,直接创建一个批处理文件(.bat)会更省事:
"C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\DTExec.exe" /F "C:\ETL\MyExcelTargetPackage.dtsx" /X86
保存后,直接在Automator里添加"运行Shell脚本"动作,调用这个批处理文件就行,步骤更少。
方案三:SSIS Catalog存储过程(适合已部署到SSISDB的包)
如果你的SSIS包已经部署到SSISDB目录,可以创建一个带32位运行参数的存储过程,然后在Automator里调用它:
CREATE PROCEDURE dbo.RunExcelTargetSSISPackage AS BEGIN DECLARE @execution_id BIGINT -- 创建执行实例,指定@use32bitruntime=1启用32位运行时 EXEC catalog.create_execution @package_name = N'MyExcelTargetPackage.dtsx', @execution_id = @execution_id OUTPUT, @folder_name = N'ETLFolder', @project_name = N'MyETLProject', @use32bitruntime = 1 -- 如需设置变量,取消注释下面的语句 -- EXEC catalog.set_execution_parameter_value @execution_id, @object_type = 30, @parameter_name = N'ExcelFilePath', @parameter_value = N'C:\Data\Output.xlsx' -- 启动包执行 EXEC catalog.start_execution @execution_id END
然后在Automator里用sqlcmd调用这个存储过程:
sqlcmd -S YourSQLInstance -d SSISDB -Q "EXEC dbo.RunExcelTargetSSISPackage"
这个方案的优势是所有包配置都在SSISDB里管理,不用在脚本里硬编码路径,更易维护。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

