来自 OPENROWSET('Microsoft.ACE.OLEDB.12.0' ,'Excel 12.0... 在用户运行时有效,但在 SQL Server 代理运行作业时不起作用;没有错误



我看过很多关于这个话题的变化,所以我以为我应该能找到一个答案,但是我被难住了。情况是这样的。

运行SSMS v18.11.1.

我有一个每分钟都在运行的任务。在步骤3中,它根据文件名确定运行哪个存储过程。对表中要上传的记录进行计数,使用OPENROWSET和'Microsoft.ACE.OLEDB.12.0'从文件中抓取数据,清除数据(重复/更新/等),然后再次对表进行计数以查看它添加了多少。最后,它发送一封带有最终细节的电子邮件。

在服务器代理作业历史记录中没有记录错误,并且我减少了它所写的内容,以确保我不会因为溢出而错过它。只有在作业自动运行时才会失败。所谓失败,我的意思是没有添加任何记录。当我手动一步一步地运行它时,它工作了。同样的流程适用于所有其他文件(txt或pdf),但不适用于这个excel文件(xlsx)。

从记录来看,这里似乎失败了:

SELECT
*
,src_file_nm = 'F:ClientsClientNameTPA20220609FileName.xlsx'
,id = ROW_NUMBER() OVER (ORDER BY (SELECT 0))
INTO TPA.PrescriptionCol86
FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0'
,'Excel 12.0;HDR=YES;Database=F:ClientsClientNameTPA20220609FileName.xlsx'
,'SELECT * FROM [Page1_1$A9:CH]'
)
WHERE [Carrier NAME] IS NOT NULL

但是,再一次,没有错误消息给我。它只是显示没有发现任何记录,但实际上有超过10,000天。

作业以用户:NT SERVICESQLSERVERAGENT执行。基于服务器角色,它应该能够执行以下类型的数据:系统管理员权限

允许Adhoc访问;在这里查看其他设置

EXEC master.sys.sp_MSset_oledb_prop

结果显示更多的属性,如果它是重要的。

服务器已安装Excel 365。

有什么建议我可以尝试让它在服务器作业期间正确运行吗?

Office系统驱动程序仅在某些场景下支持,包括:

  1. 对各种文件进行读写的桌面应用程序格式包括Microsoft Office Access、Microsoft Office Excel和文本文件。

  2. 在支持的文件格式和数据库之间传输数据存储库,如SQL Server。例如,将数据从使用SQL Server导入和导出Excel工作簿向导或SQL Server集成服务()提供运行SSIS作业在具有有效HKEY_CURRENT_USER的登录用户的上下文中注册表项) .

https://www.microsoft.com/en-us/download/details.aspx?id=54920

这既是一个不支持它的声明,也是一个让它工作的提示。但是最好不要使用链接服务器上的Office驱动程序。它可以使你的SQL Server崩溃。如果您必须使用它们,请从SSIS包或PowerShell作业中使用它们,以避免在SQL Server进程中加载它们。

您可以将链接的服务器替换为流式SSIS目的地,它允许使用OPENROWSET查询SSIS包的结果。