我试图从存储过程中执行DTS包(我们称之为'MY_DTS')。没有成功。使用存储过程中的xp_cmdshell调用dtsrun - Microsoft Jet数据库引擎无法打开文件错误
这里是我的程序代码:
CREATE PROCEDURE [dbo].[RUN_DTS]
@DTSName nvarchar(4000)
AS
DECLARE @Command AS nvarchar(4000)
SET @Command = 'dtsrun /S "(local)" /N "' + @DTSName + '" /W "0" /E'
SELECT @Command
EXEC master..xp_cmdshell @Command
GO
我使用存储过程如下:
EXEC HURT.dbo.RUN_DTS @DTSName = 'MY_DTS'
在执行过程中它打印预期的命令:
dtsrun /S "(local)" /N "MY_DTS" /W "0" /E
和结果具有以下错误:
Error string: The Microsoft Jet database engine cannot open the file '\\network_drive_server_ip\path_to_important_file'.
It is already opened exclusively by another user, or you need permission to view its data.
Error source: Microsoft JET Database Engine
Help file:
Help context: 5003051
我该如何解决此问题?
要添加一些观点:
有两台服务器:
Windows Server 2003中运行SQL Server 2000我连接到该服务器,并远程执行使用查询分析器的所有操作(以运行SQL语句)。我将它称为数据库服务器。
网络驱动器服务器。
MY_DTS驻留在数据库服务器上,引用包含需要读取的important_file的网络驱动器。
从调用命令行内相同的命令succeded:
>dtsrun /S "(local)" /N "MY_DTS" /W "0" /E
DTSRun: Package execution complete.
而且我敢肯定,99%没有该文件在执行存储过程的时刻打开。我已经使用Process Explorer v16.05确认了它:没有找到句柄或DLL。所以我认为这是权限的事情。