当来自 SQL 代理的 运行 时,SSIS 脚本任务失败
SSIS Script Task Fails when run from SQL Agent
我删除并重写了这个问题,因为我认为我没有说清楚,这引起了一些挫败感。
我有一个创建和填充 Excel sheet 的 SSIS 程序包,该程序包运行完美并根据需要创建文件,并且可以按计划从 SQL 服务器执行代理没有任何问题。
当我尝试执行脚本任务时出现问题,该脚本任务执行一些 VB 脚本以删除 excel 文件中的特定行。
Public Sub Main()
'
Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
xlApp = New Excel.Application
xlApp.Workbooks.Open(Dts.Variables("NewFileName").Value.ToString)
xlSheet = xlApp.Workbooks(1).ActiveSheet
xlSheet.Rows(4).Delete()
xlApp.Workbooks(1).Save()
xlApp.Workbooks(1).Close()
xlSheet = Nothing
'
Dts.TaskResult = ScriptResults.Success
End Sub
现在它可以在 BIDS 环境中完美运行并且完全满足我的需要。然而,一旦部署了包,作业就会失败并给出错误
Source: Delete Header Row Description:
System.Reflection.TargetInvocationException: Exception has been thrown
by the target of an invocation. --->
System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft
Excel cannot access the file 'G:\Folder\Folder1\Status
File\Status26032015.xls'. There are several possible reasons: ? The
file name or path does not exist. ? The file is being used by another
program. ? The workbook you are trying to save has the same name as a
currently open workbook.
包作为 ServerName\Administrator 执行,它确实可以访问 G:(因为它在创建文件时会失败,因为这是使用相同的变量完成的)。我检查过的所有文章都指向 SQL 服务器代理权限,但是作为 90% 的作业运行,其中包括在 G 驱动器中创建文件,它肯定必须具有访问权限。
SQL 服务器代理进程将无法转换任何映射的驱动器,例如G:\
。
我认为这是因为它没有启动完整的 windows 会话,也没有加载用户的配置文件。
我会将驱动器号引用转换为 URI 格式,例如\myserver\fileshare
尝试在服务器 运行 SQL 代理作业中添加此文件夹;
C:\Windows\SysWOW64\config\systemprofile\Desktop
它解决了我面临的类似问题。
我删除并重写了这个问题,因为我认为我没有说清楚,这引起了一些挫败感。
我有一个创建和填充 Excel sheet 的 SSIS 程序包,该程序包运行完美并根据需要创建文件,并且可以按计划从 SQL 服务器执行代理没有任何问题。
当我尝试执行脚本任务时出现问题,该脚本任务执行一些 VB 脚本以删除 excel 文件中的特定行。
Public Sub Main()
'
Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
xlApp = New Excel.Application
xlApp.Workbooks.Open(Dts.Variables("NewFileName").Value.ToString)
xlSheet = xlApp.Workbooks(1).ActiveSheet
xlSheet.Rows(4).Delete()
xlApp.Workbooks(1).Save()
xlApp.Workbooks(1).Close()
xlSheet = Nothing
'
Dts.TaskResult = ScriptResults.Success
End Sub
现在它可以在 BIDS 环境中完美运行并且完全满足我的需要。然而,一旦部署了包,作业就会失败并给出错误
Source: Delete Header Row Description: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Excel cannot access the file 'G:\Folder\Folder1\Status File\Status26032015.xls'. There are several possible reasons: ? The file name or path does not exist. ? The file is being used by another program. ? The workbook you are trying to save has the same name as a currently open workbook.
包作为 ServerName\Administrator 执行,它确实可以访问 G:(因为它在创建文件时会失败,因为这是使用相同的变量完成的)。我检查过的所有文章都指向 SQL 服务器代理权限,但是作为 90% 的作业运行,其中包括在 G 驱动器中创建文件,它肯定必须具有访问权限。
SQL 服务器代理进程将无法转换任何映射的驱动器,例如G:\
。
我认为这是因为它没有启动完整的 windows 会话,也没有加载用户的配置文件。
我会将驱动器号引用转换为 URI 格式,例如\myserver\fileshare
尝试在服务器 运行 SQL 代理作业中添加此文件夹; C:\Windows\SysWOW64\config\systemprofile\Desktop
它解决了我面临的类似问题。