【发布时间】:2016-09-23 16:51:03
【问题描述】:
我正在尝试创建一个允许我将参数传递给 SSIS 包的存储过程。
DECLARE @Path VARCHAR(200),
@ExcelPath VARCHAR(50),
@DB VARCHAR(100),
@ExcelSheet VARCHAR(500),
@Cmd VARCHAR(4000),
@ReturnCode INT,
@Msg VARCHAR(1000),
@SQLServer varchar(255),
@EmailAddress varchar(255),
@DTEXEC varchar(255)
SELECT @Path = 'C:\SpyderNetwork Production\SSIS\IMPORTSC\'
SELECT @ExcelPath = 'C:\Users\Administrator\Desktop\SR\test.xlsx'
SELECT @ExcelSheet = 'DATA$'
select @DTEXEC = 'C:\"Program Files (x86)"\"Microsoft SQL Server"\120\DTS\Binn\dtexec.exe'
exec xp_cmdshell ''
SELECT @Cmd = @DTEXEC + ' /FILE "' + @Path + 'package.dtsx" /MAXCONCURRENT 1 /CHECKPOINTING OFF /REPORTING EW'
+ ' /SET \Package.Variables[User::ExcelPath].Properties[Value];' + @ExcelPath
+ ' /SET \Package.Variables[User::ExcelSheet].Properties[Value];' + @ExcelSheet
EXEC @ReturnCode = xp_cmdshell @Cmd
我已经用它们的值替换了参数,在命令提示符下运行并且一切正常,但是当我在这里实现它时,我收到以下错误。同样,当我可以在命令提示符下运行并且它没有问题时,它说我没有运行它的权限是没有意义的。我在这里缺少一些基本的东西吗?
Microsoft (R) SQL Server 执行包实用程序 32 位版本 12.0.2430.0 版权所有 (C) 微软公司。版权所有。 空值 开始时间:上午 11:29:04 错误:2016-09-23 11:29:04.92 代码:0xC0016016 来源:包 说明:无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“密钥在指定状态下无效。”。您可能无权访问此信息。当存在加密错误时会发生此错误。验证 正确的密钥可用。 结束错误 错误:2016-09-23 11:29:04.92 代码:0xC0016016 来源:包 说明:无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“密钥在指定状态下无效。”。您可能无权访问此信息。当存在加密错误时会发生此错误。验证 正确的密钥可用。 结束错误 错误:2016-09-23 11:29:05.03 代码:0xC0202009 来源:包连接管理器“TEST.SpyderDB.TESTUSER” 说明:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E4D。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E4D 描述:“用户 'TESTUSER' 登录失败。”。 结束错误 错误:2016-09-23 11:29:05.03 代码:0xC020801C 来源:数据流任务 OLE DB 目标 [69] 说明:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“TEST.SpyderDB.TESTUSER”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。之前可能会发布错误消息 或有关 AcquireConnection 方法调用失败原因的更多信息。 结束错误 错误:2016-09-23 11:29:05.03 代码:0xC0047017 来源:数据流任务 SSIS.Pipeline 说明:OLE DB 目标验证失败并返回错误代码 0xC020801C。 结束错误 错误:2016-09-23 11:29:05.03 代码:0xC004700C 来源:数据流任务 SSIS.Pipeline 说明:一个或多个组件验证失败。 结束错误 错误:2016-09-23 11:29:05.03 代码:0xC0024107 来源:数据流任务 描述:任务验证期间出现错误。 结束错误 警告:2016-09-23 11:29:05.03 代码:0x80019002 资料来源:importSCSoldUnits 说明:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。 Execution 方法成功,但引发的错误数 (5) 达到了允许的最大值 (1);导致失败。当错误数量达到指定的数量时会发生这种情况 d 在最大错误计数中。更改 MaximumErrorCount 或修复错误。 结束警告 警告:2016-09-23 11:29:05.03 代码:0x80019002 来源:包 说明:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。 Execution 方法成功,但引发的错误数 (5) 达到了允许的最大值 (1);导致失败。当错误数量达到指定的数量时会发生这种情况 d 在最大错误计数中。更改 MaximumErrorCount 或修复错误。 结束警告 DTExec:包执行返回 DTSER_FAILURE (1)。 开始时间:上午 11:29:04 完成时间:上午 11:29:05 经过:0.172 秒 空
【问题讨论】:
-
是的,这就是解决方案。将 SSIS 包保护级别属性创建为 EncryptSensitiveWithPassword 和项目保护级别相同。在 SQL 中添加 /De 密码(与保护级别中使用的密码相同)以执行 SSIS。现在一切正常。
标签: sql stored-procedures ssis xp-cmdshell