DTEXEC执行超时 - 但仅限于从存储过程调用时

时间:2012-04-12 08:25:13

标签: sql timeout ssis xp-cmdshell

以下问题一直困扰着我:

我有一个用于处理某些接口的dtsx-package。我在一个存储过程中调用它,如下所示:

SET @v_statement = 'DTEXEC /FILE "' + @v_if_ssis_package + '" /SET \Package.Variables[User::message_number].Properties[Value];' + CAST(@i_message_number AS VARCHAR(20))
                + ' /ConfigFile "' + REPLACE(@v_if_ssis_package, '.dtsx', '.xml')  + '"'

EXECUTE AS USER = 'shell';  

INSERT INTO #SSISResult
EXEC @v_ssis_returncode = xp_cmdshell @v_statement;

据我所知,Shell用户可以运行xp_cmdshell调用。尽管如此,我在运行存储过程时遇到以下错误:

  

Microsoft(R)SQL Server执行包实用程序版本10.50.1600.1(适用于32位版权所有(C)Microsoft Corporation 2010.保留所有权利。开始时间:10:12:28错误:2012-04-12 10:12:59.11代码:0x00000000来源:脚本任务脚本描述:超时已过期。操作完成之前经过的超时时间或服务器没有响应...

这是一直困扰我的事情..如果我会运行与独立查询完全相同的事情(如下所示),它运行得很好。关于什么是纳米人的任何想法?

EXECUTE AS USER = 'shell';
EXEC xp_cmdshell 'dtexec /FILE "C:\mypackage.dtsx" /SET \Package.Variables[User::message_number].Properties[Value];48644 /ConfigFile "C:\mypackage.xml"'

非常感谢能够就这个问题给我一些指示的人。

1 个答案:

答案 0 :(得分:0)

可能是权限错误

快速猜测:

运行GRANT EXECUTE ON xp_cmdshell TO shell

也许是EXECUTE AS login = 'shell'而不是用户