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 放在一起并部署到一个环境中,看看会发生什么。事情可能会很好。否则,我可以看到双重模仿的尝试破坏了整个方法。
我正在尝试从另一个解决方案调用 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 放在一起并部署到一个环境中,看看会发生什么。事情可能会很好。否则,我可以看到双重模仿的尝试破坏了整个方法。