【问题标题】:How can i use dtsExec command in stored procedure to execute ssis package by passing entire configuration from a table?如何在存储过程中使用 dtsExec 命令通过从表中传递整个配置来执行 ssis 包?
【发布时间】:2018-11-16 06:25:20
【问题描述】:

我正在使用给定的命令行在 sql server 的 sp 中执行 ssis 包。

SET @dtsExecCmd = @DTSEXECCMDPATH + ltrim(rtrim(@ssisPkgFilePath)) + '" /CONFIGFILE "' + ltrim(rtrim(@ssisCommonConfigPath)) + '"'

EXEC @result = master..xp_cmdshell @dtsExecCmd  

在哪里,

@DTSEXECCMDPATH = 'G:\"Program Files (x86)"\"Microsoft SQL Server"\110\DTS\Binn\dtexec /F "'


@ssisPkgFilePath = '\\dtsx package path\package.dtsx'

@ssisCommonConfigPath =
'\\CommonConfigurationpath\Configuration.dtsConfig'

现在我想通过传递表中的配置(之前存在于Configuration.dtsConfig 中)来执行相同的包,如果@config 包含表中的配置,我该如何编辑此命令行。

【问题讨论】:

  • 什么版本的 SSIS? 从 SQL 2012 开始,有一个更复杂的 T-SQL API,这意味着您无需求助于不安全的xp_cmdshell hack。
  • 如果你还在使用.dtsConfig,那么我猜它是一个旧版本。您需要更改 package 以从数据库表中读取其配置,而不是从 dtsConfig 文件中读取。这是在包中进行的更改。但实际上,这是现在非常古老的技术。你绝对不应该在这个版本中构建任何新东西。
  • 哦.. 我在您的 bin 路径中看到 110 所以这是 SQL 2012?您确实需要升级到 SSISDB 和项目部署。
  • 是的,尼克这是 sql server 2012 并且 ssis 也很老了......它已经使用了很长时间
  • 尼克到目前为止,我将只使用 sql server 2012(或不久的将来的 2017),您能否建议在 ssis 包中实际需要更新的内容,以便我可以读取配置表中的 dtexec 命令(加密),这种变化会有多大?在此先感谢!

标签: .net sql-server ssis msdn dtexec


【解决方案1】:

我假设您不会为这些包升级到项目部署并坚持包部署。

没有DTEXEC 命令行开关可让您定义要从中加载配置的 SQL Server 表。

从 SQL Server 表中使用包配置的最简单方法是在 SSDT 中打开包,转到 SSIS/包配置并进行设置。那么你根本不需要在DTEXEC 命令行上传递任何东西。

https://docs.microsoft.com/en-us/sql/integration-services/package-configurations?view=sql-server-2014#sql-server

如果您不想更改包并坚持通过DTEXEC 传递它,那么我想您可以编写一个包装器,将配置数据从表中拉出并使用/SET 开关。

但我真的鼓励并建议您将这些包升级到项目部署模型。不要用这种旧方法浪费时间。你只是引入了技术债务。

您还应该知道xp_cmdshell 通常被认为是一个安全问题。

【讨论】:

  • 感谢您的信息。我想知道的另一件事是,如果我选择使用 sql server 表中的包配置,我可以将表中的连接字符串保持为加密状态吗?
  • 不确定 - 您需要进行实验。我总是尝试使用 Windows 身份验证,因此不需要加密任何内容。
  • 我们可以在设置packge配置的同时设置认证类型?
  • 身份验证类型在连接字符串中定义。这是在 SSDT 设计时定义的,也可以在配置中定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多