我有一个存储过程,该过程接受必须设置为负责运行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吗?
答案 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 + '"'