我正在尝试创建一个存储过程,允许我将参数传递给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执行包实用程序 版本12.0.2430.0适用于32位 版权所有(C)Microsoft Corporation。版权所有。 空值 开始时间:上午11:29:04 错误:2016-09-23 11:29:04.92 代码:0xC0016016 来源:包装 描述:无法解密受保护的XML节点" DTS:密码"错误0x8009000B"密钥无法在指定状态下使用。"。您可能无权访问此信息。出现加密错误时会发生此错误。验证 正确的密钥可用。 结束错误 错误:2016-09-23 11:29:04.92 代码:0xC0016016 来源:包装 描述:无法解密受保护的XML节点" DTS:密码"错误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。 AcquireConnection方法调用连接管理器" TEST.SpyderDB.TESTUSER"失败,错误代码为0xC0202009。 bef可能会发布错误消息 通过更多信息来了解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。执行方法成功,但引发的错误数(5)达到允许的最大值(1);导致失败。当错误数量达到指定数量时,会发生这种情况 d在MaximumErrorCount中。更改MaximumErrorCount或修复错误。 结束警告 警告:2016-09-23 11:29:05.03 代码:0x80019002 来源:包装 描述:SSIS警告代码DTS_W_MAXIMUMERRORCOUNTREACHED。执行方法成功,但引发的错误数(5)达到允许的最大值(1);导致失败。当错误数量达到指定数量时,会发生这种情况 d在MaximumErrorCount中。更改MaximumErrorCount或修复错误。 结束警告 DTExec:包执行返回DTSER_FAILURE(1)。 开始时间:上午11:29:04 完成时间:上午11:29:05 经过:0.172秒 NULL
答案 0 :(得分:0)
如果您使用的是SQL 2012或更高版本,则可以使用其他解决方案而不使用xp_cmdshell。
项目应该在项目部署模型中并部署到SSISDB目录。
EXEC [SSISDB].[catalog].[create_execution]
@folder_name = N'Folder',
@project_name = N'Test',
@package_name = N'Package.dtsx',
@reference_id = NULL,
@use32bitruntime = FALSE,
@execution_id = @executionID OUTPUT
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@executionID,
@object_type = 20,
@parameter_name = N'Var1',
@parameter_value = @Var1
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@executionID,
@object_type = 20,
@parameter_name = N'Var2',
@parameter_value = @Var2
EXEC [SSISDB].[catalog].[start_execution] @executionID