通过SQL脚本执行SSIS包报错:无法访问或找不到包
你尝试通过SQL脚本执行SSIS包,脚本如下:
Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name = N'SF_Appointment.dtsx' ,@execution_id = @execution_id OUTPUT ,@folder_name = N'Packages' ,@project_name = N'SF_tables' ,@use32bitruntime = False ,@reference_id = Null ,@runinscaleout = False
调整文件夹名称参数后仍报错:
Msg 27146, Level 16, State 1, Procedure SSISDB.catalog.create_execution, Line 201 [Batch Start Line 0] Cannot access the package or the package does not exist. Verify that the package exists and that the user has permissions to it.
已排除权限问题,可从以下几个方向排查:
核对参数与SSISDB实际层级匹配
SSISDB的层级是文件夹 -> 项目 -> 包,@folder_name必须填写项目所在的文件夹名称,而非包的单独目录。执行以下SQL查询包的真实路径,核对参数是否一致:SELECT f.name AS folder_name, p.name AS project_name, pkg.name AS package_name FROM SSISDB.catalog.folders f JOIN SSISDB.catalog.projects p ON f.folder_id = p.folder_id JOIN SSISDB.catalog.packages pkg ON p.project_id = pkg.project_id WHERE pkg.name = 'SF_Appointment.dtsx'确认包的部署状态
检查包是否确实部署到了指定项目中。若包是单独部署(未作为项目组件),需确认它在SSISDB.catalog.packages中的记录,且对应的project_id是否为空——这种场景下执行逻辑会有差异。检查名称大小写匹配
如果SQL Server实例使用区分大小写的排序规则,脚本中填写的文件夹、项目、包名必须与SSISDB中存储的完全一致(包括大小写),比如SF_appointment.dtsx和SF_Appointment.dtsx会被视为不同名称。验证环境引用参数
若包依赖SSIS环境变量,@reference_id不能设为Null,需指定对应的环境引用ID。执行以下查询获取目标项目的环境引用信息:SELECT er.reference_id, f.name AS folder_name, p.name AS project_name, e.name AS environment_name FROM SSISDB.catalog.environment_references er JOIN SSISDB.catalog.folders f ON er.folder_id = f.folder_id JOIN SSISDB.catalog.projects p ON er.project_id = p.project_id JOIN SSISDB.catalog.environments e ON er.environment_id = e.environment_id WHERE p.name = 'SF_tables'将查询到的
reference_id替换脚本中的Null值。排查Scale Out配置(可选)
尽管脚本中@runinscaleout = False,若SSIS Scale Out已启用,可检查Scale Out Worker服务是否正常运行——此场景较少触发“包不存在”错误,可作为最后排查项。
内容的提问来源于stack exchange,提问作者Dense_Dog

