如何在存储过程的SSIS步骤上设置项目参数

时间:2019-05-10 15:59:40

标签: sql-server tsql ssis etl

我有一个存储过程,该过程接受必须设置为负责运行SSIS程序包的动态创建的代理作业的参数。

我试图直接从我的应用程序执行该程序包,但应以其他用户身份运行。

--Add database server
EXEC msdb.dbo.sp_add_jobserver
    @job_id =  @jobId,
    @server_name = @databaseServer;

--Add SSIS step
DECLARE @jobCommand nvarchar(max)
SELECT @jobCommand = N' /ISSERVER  "\SSISDB\MyPackage.dtsx" '
SELECT @jobCommand = @jobCommand + N' /SERVER ' + @ssisServer + N' /CHECKPOINTING OFF /REPORTING E'
--Set variables
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varFundCode\"";"\"' + @fundCode + '\""'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varInitiatedBy\"";"\"' + @initiatedBy + '\""'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varPackageTimestamp\"";"\"' + @timestamp + '\""'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varReprint\"";"' + CONVERT(nvarchar(10), @isReprint) + '"'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varRunID\"";"\"' + CONVERT(nvarchar(20), @runId) + '\""'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varShouldEmail\"";"' + CONVERT(nvarchar(10), @shouldEmail) + '"'
SELECT @jobCommand = @jobCommand + N' /Par "\"$Package::varTestModeOn\"";"' + CONVERT(nvarchar(10), @testModeOn) + '"'
SELECT @jobCommand = @jobCommand + N' /SET \Package.Variables[User::varEmailRecipient].Value;"' + @emailRecipient + '"'
SELECT @jobCommand = @jobCommand + N' /Par "Projects::Connections[Database connection manager].Properties[ServerName]";"' + @databaseServer + ''
SELECT @jobCommand = @jobCommand + N' /Par "Project::Connections[Database connection manager].Properties[InitialCatalog]";"' + @dbName + ''


EXEC msdb.dbo.sp_add_jobstep
    @job_id = @jobId,
    @step_name = N'Execute vendor SSIS package',
    @subsystem = N'SSIS',
    @command = @jobCommand,
    @proxy_name = 'remittances_proxy'

如何正确设置参数和连接变量, 因为我收到了   选项“参数”的参数“ Projects :: Connections [Database””无效。命令行参数无效。步骤失败。

关于工作历史记录或  环境参考ID:NULL。说明:输入值的数据类型与“布尔”的数据类型不兼容。

我尝试为布尔参数传递true / false和0/1吗?

1 个答案:

答案 0 :(得分:0)

请参考以下官方文档:

  

您还可以使用参数设置连接管理器属性。您使用CM前缀表示连接管理器参数。

     

在下面的示例中,SourceServer连接管理器的InitialCatalog属性设置为ssisdb

/parameter CM.SourceServer.InitialCatalog;ssisdb  
  

在下面的示例中,SourceServer连接管理器的ServerName属性设置为句点(。),以指示本地服务器。

/parameter CM.SourceServer.ServerName;.

基于此,更改以下代码行

SELECT @jobCommand = @jobCommand + N' /Par "Projects::Connections[Database connection manager].Properties[ServerName]";"' + @databaseServer + ''
SELECT @jobCommand = @jobCommand + N' /Par "Project::Connections[Database connection manager].Properties[InitialCatalog]";"' + @dbName + ''

收件人

SELECT @jobCommand = @jobCommand + N' /Par CM.Databaseconnectionmanager.ServerName;"' + @databaseServer + '"'
SELECT @jobCommand = @jobCommand + N' /Par CM.Databaseconnectionmanager.InitialCatalog;"' + @dbName + '"'