我正在运行SQL Server 2012并且我已经设置了一个SQL Server代理作业,它基本上会在数据库上运行SQL查询并将输出导出到Excel文件(扩展名为xlsx)。
当我解析' '工作属性'中的查询窗口来测试我的查询是否运行正常,我收到消息'命令已成功解析!'
然而,当我检查预定作业的结果时,它显示它已失败。错误日志提供以下详细信息:
OLE DB提供程序" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"无法插入表格#34; [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]
我已经创建了文件' myfile2.xlsx'在C:\ test文件夹中,该Excel文件包含上述SQL查询中的列名作为列标题。我期望SQL作业用SQL查询的输出填充Excel表。
关于这个问题的任何帮助或关于我是否在这里做错事的任何指示都将受到高度赞赏。
答案 0 :(得分:0)
SQL / Server将在其本地c:\ test中查找。因此,如果您的PC的C:驱动器上有该文件,并且您没有在本地运行SQL / Server,那么SQL / Server将无法在您的c:驱动器上找到该文件
另外..“插入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;