sql-server - 如何在存储过程中的 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?
解决方案
参考以下官方文档:
您还可以使用参数设置连接管理器属性。您使用 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 + '"'
推荐阅读
- python - 将 hdf5 附加到另一个 hdf5 文件
- artifactory - 使用 JFrog AQL 仅获取总数
- oracle - Oracle19c - 在表空间下创建角色用户
- css - 如何强制 flex 列使用所有可用宽度?
- swift - 使 Cocoa NSWindow 半透明隐藏故事板元素
- javascript - 为什么不像 XHR 中的异步 API 的同步版本?
- couchbase - 如何按格式化的字符串字段分组?
- ios - 您如何找出在 SwiftUI 中点击了哪个视图?
- node.js - Javascript/Nodejs Promise 中的多次延迟
- python - 在 Jupyter Hub 中瞧瞧