【问题标题】:SSIS External Package - Invalid Class String ErrorSSIS 外部包 - 无效的类字符串错误
【发布时间】:2021-12-06 18:50:33
【问题描述】:

我正在尝试从另一个解决方案调用 SSIS 包,但是当我尝试选择外部包时,它给了我一个 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)

连接属性

【问题讨论】:

  • 执行包任务可用于执行同一项目中的包(用于 SSISDB)或文件系统中的包或通过msdb 部署的包。它不能在 SSISDB 的其他解决方案中执行其他包。见Running Packages
  • 谢谢我错过了文档中的那部分。

标签: sql-server visual-studio ssis


【解决方案1】:

按照@larnu 在 cmets 中提到的内容,执行包任务可以运行当前项目中的包,或者存储在文件系统或 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 支持的帐户而不是仅 DB 帐户的原因之一。 我鼓励您一起建立一个有效的 POC 并部署到一个环境中,看看会发生什么。事情可能会很好。否则,我会看到双重模仿的尝试会破坏整个方法。

【讨论】:

  • 感谢您的建议。我有一种感觉它会很笨重,但这似乎是做到这一点的方法。我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 2019-06-01
  • 2017-02-20
相关资源
最近更新 更多