SSIS 外部包 - 无效 Class 字符串错误

SSIS External Package - Invalid Class String Error

我正在尝试从另一个解决方案调用 SSIS 包,但是当我尝试 select 外部包时它给了我一个 Invalid Class String 错误。我正在使用 Windows 身份验证。

关于问题可能是什么的任何想法?

错误信息

Invalid class string
------------------------------
Program Location:

   at Microsoft.SqlServer.Dts.Runtime.Application.GetPackageInfos(String strFolder, String serverName, String serverUserName, String serverPassword)
   at Microsoft.SqlServer.Dts.Tasks.ExecutePackageTask.PackageBrowser.<>c__DisplayClass3_0.<EditValue>b__0(String path)
   at Microsoft.SqlServer.Dts.Tasks.ExecutePackageTask.PackageBrowser.EditValue(ITypeDescriptorContext context, IServiceProvider provider, Object value)

===================================

Invalid class string
------------------------------
Program Location:

   at Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass.GetPackageInfos(String bstrPackageFolder, String bstrServerName, String bstrServerUserName, String bstrServerPassword)
   at Microsoft.SqlServer.Dts.Runtime.Application.GetPackageInfos(String strFolder, String serverName, String serverUserName, String serverPassword)

连接属性

根据@larnu 在评论中提到的内容,执行包任务可以 运行 当前项目中的包,或者存储在文件系统或 msdb 中的包。

到 运行 SSISDB 中的一个包,我认为这会变得“有趣”。

在它的核心,运行在 SSISDB 中安装一个包是几个 Stored Procedure calls

Declare @execution_id bigint  
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx'
, @execution_id=@execution_id OUTPUT
, @folder_name=N'TestDeply4'
, @project_name=N'Integration Services Project1'
, @use32bitruntime=False
, @reference_id=Null;

Select @execution_id  
DECLARE @var0 sql_variant = N'Child1.dtsx'  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=20, @parameter_name=N'Parameter1', @parameter_value=@var0  

DECLARE @var1 sql_variant = N'Child2.dtsx'  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=20, @parameter_name=N'Parameter2', @parameter_value=@var1  

DECLARE @var2 smallint = 1  
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var2  

EXEC [SSISDB].[catalog].[start_execution] @execution_id  

该混乱会在文件夹 'TestDeply4' 中的项目 'Integration Services Project1' 中找到包 'Child1.dtsx' 并创建执行上下文。它为参数 1 和 2 赋值。最后,它开始执行。

因此,对于来自“外部”项目的 SSISDB 中的 运行 SSIS 包,您需要在 Execute SQL Task

中复制那些相同的调用

有什么好玩的

SSISDB 用来执行所有操作的存储过程是基于 CLR 的,并且会进行各种模拟。这是请求包到 运行 的帐户必须是 AD 支持帐户而不是仅数据库帐户的原因之一。 我鼓励您将一个工作 POC 放在一起并部署到一个环境中,看看会发生什么。事情可能会很好。否则,我可以看到双重模仿的尝试破坏了整个方法。