如何解决此SQL Server代理作业错误消息?

问题描述:

我正在运行SQL Server 2012,并且已经设置了一个SQL Server代理作业,它将基本上在数据库上运行SQL查询并将输出导出到Excel文件(带有xlsx扩展名)。如何解决此SQL Server代理作业错误消息?

当我在'作业属性'窗口中解析'查询'来测试我的查询是否运行正常时,我得到'命令被成功解析!'的消息。

但是,当我检查计划作业的结果时,它显示出它已失败。错误日志提供了以下详细信息:

链接服务器“(null)”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”无法INSERT INTO表“[Microsoft.ACE.OLEDB.12.0]”。 [SQLSTATE 42000](错误7343)OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”返回消息“多步OLE DB操作生成错误。检查每个OLE DB状态值是否可用。工作完成了。“ [SQLSTATE 01000](错误7412)链接服务器的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”“(null)”返回消息“没有当前记录”。

我的SQL查询的内容如下:

INSERT INTO OPENDATASOURCE (
    'Microsoft.ACE.OLEDB.12.0', 
'Data Source=c:\test\myfile2.xlsx;Extended Properties=Excel 12.0 Xml')...[Sheet1$] 

SELECT TOP 100 ReservationStayID,NameTitle,FirstName,LastName,ArrivalDate,DepartureDate FROM [GuestNameInfo] 

我已经创建的文件C“myfile2.xlsx”:\ test文件夹和Excel文件包含来自SQL查询的列名上面的列标题。我期待SQL作业用SQL查询的输出填充Excel表格。

对这个问题的任何帮助或任何关于我是否在这里做错了什么的指针将不胜感激。

+0

可能权限... –

+0

您是否尝试过在一个查询窗口运行查询(而不是在代理)?您是否检查过安装的驱动程序是否正确(32 vs 64位,正确的Office版本等)。您是否检查过SQL Server代理的用户是否有足够的权限写入您想要的路径? – Pred

+0

@Pred (1)驱动程序已被检查并确定。 (2)在SSMS中运行查询会给我以下错误消息:对于链接服务器“(null)”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”无法INSERT INTO table“[Microsoft.ACE.OLEDB。 12.0]”。 (3)如何检查SQL Server代理是否有足够的权限写入路径? – user3115933

SQL/Server会查看它的本地c:\ test。因此,如果您的PC上的C:驱动器上有该文件,并且您没有在本地运行SQL/Server,则SQL/Server将无法在您的c:驱动器上找到该文件。

另外..“Insert into OpenDataSource “不是有效的SQL。试试...

Select * Into GuestNameInfo 
    From OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0', 
         'Data Source=\\ServerName\Directory\Test.xlsx;Extended Properties=Excel 12.0 Xml')...[Sheet1$] 

或者你可以使用一个临时表...

If Object_Id('TempDB..#GuestNameInfo') Is Not Null Drop Table #GuestNameInfo; 

Select * Into #GuestNameInfo 
    From OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0', 
         'Data Source=\\ServerName\Directory\Test.xlsx;Extended Properties=Excel 12.0 Xml')...[Sheet1$]; 

Select * From #GuestNameInfo; 
Drop Table #GuestNameInfo;