【问题标题】:How to solve this SQL Server Agent Job Error Message?如何解决此 SQL Server 代理作业错误消息?
【发布时间】:2017-04-27 22:49:16
【问题描述】:

我正在运行 SQL Server 2012,并且我已经设置了一个 SQL Server 代理作业,该作业基本上将在数据库上运行 SQL 查询并将输出导出到 Excel 文件(扩展名为 xlsx)。

当我在“作业属性”窗口中“解析”查询以测试我的查询是否可以正常运行时,我收到消息“命令已成功解析!”

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

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

我的 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:\test 文件夹中创建了文件“myfile2.xlsx”,并且该 Excel 文件包含来自上述 SQL 查询的列名作为它们的列标题。我期望 SQL 作业用 SQL 查询的输出填充 Excel 表。

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

【问题讨论】:

  • 可能是权限...
  • 您是否尝试在查询窗口(而不是代理)中运行查询?您是否检查过安装的驱动程序是否正确(32 位与 64 位,正确的 Office 版本等)。您是否检查过 SQL Server 代理的用户是否有足够的权限写入您想要的路径?
  • @Pred (1) 已检查驱动程序并正常。 (2) 在 SSMS 中运行查询会给我以下错误消息:链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”无法插入表“[Microsoft.ACE.OLEDB.12.0” ]”。 (3)如何检查SQL Server Agent是否有足够的权限写入路径?
  • 创建一个空的excel文件并尝试写入。
  • @Pred 创建一个空的 Excel 文件(即没有标题)会给我以下来自作业的错误消息:列名或提供的值的数量与表定义不匹配。 [SQLSTATE 21S01](错误 213)。步骤失败。

标签: sql-server tsql oledb sql-server-agent


【解决方案1】:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2010-11-05
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多