.net 如何在存储过程中使用dtsExec命令通过从表中传递整个配置来执行ssis包?

.net 如何在存储过程中使用dtsExec命令通过从表中传递整个配置来执行ssis包?,.net,sql-server,ssis,msdn,dtexec,.net,Sql Server,Ssis,Msdn,Dtexec,我使用给定的命令行在sql server的sp中执行ssis包 SET @dtsExecCmd = @DTSEXECCMDPATH + ltrim(rtrim(@ssisPkgFilePath)) + '" /CONFIGFILE "' + ltrim(rtrim(@ssisCommonConfigPath)) + '"' EXEC @result = master..xp_cmdshell @dtsExecCmd 在哪里, @DTSEXECCMDPATH = 'G:\"Program

我使用给定的命令行在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
包含表中的配置,我必须如何编辑此命令行。

我假设您不打算升级到这些包的项目部署,而是坚持包部署

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

从SQLServer表使用包配置的最简单方法是在SSDT中打开包,转到SSIS/包配置并进行设置。然后您根本不需要在
DTEXEC
命令行上传递任何内容

如果您不想进行包更改,并且坚持要通过
DTEXEC
传递包,那么我想您可以编写一个包装器,将配置数据从表中取出,然后使用
/SET
开关逐个应用这些配置

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


您还应该知道,
xp\u cmdshell
通常被认为是一个安全问题。

什么版本的SSIS?从SQL 2012开始,有一个更复杂的T-SQL API,这意味着您不需要求助于不安全的
xp\u cmdshell
hacks。如果您仍然使用
.dtsConfig
,那么我猜这是一个旧版本。您需要更改包,以便从数据库表而不是dtsConfig文件读取其配置。这是对包装的更改。但实际上,这是一项非常古老的技术。你绝对不应该在这个版本中构建任何新的东西。哦。。我在您的bin路径中看到
110
,那么这是SQL 2012?您确实需要升级到SSIDB和project deployment。是的,nick这是sql server 2012,ssis也很旧…它从longNick开始使用,到现在为止,我只使用sql server 2012(或在不久的将来使用2017),您能建议ssis包中实际需要更新的内容吗,这样我就可以从表(加密的)中读取dtexec命令中的配置,以及该更改有多大?提前谢谢!!谢谢你的信息。我想知道的另一件事是,如果我选择使用sql server表中的包配置,是否可以将表中的连接字符串保持为加密的?不确定-您需要进行实验。我总是尝试使用windows身份验证,因此不需要加密任何内容。我们可以在设置packge配置时设置身份验证类型?身份验证类型在连接字符串中定义。在设计时在SSDT中定义,也可以在配置中定义。