首页 > 解决方案 > 如何在存储过程中的 SSIS 步骤上设置项目参数

问题描述

我有接受参数的存储过程,我必须设置这些参数来动态创建负责运行 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。说明:输入值的数据类型与“布尔”的数据类型不兼容。

我尝试为布尔参数传递真/假和 0/1?

标签: sql-servertsqlssisetl

解决方案


参考以下官方文档:

您还可以使用参数设置连接管理器属性。您使用 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 + '"'

推荐阅读