SQL Server 2014 – 链接的Excel文件上的错误15281

我将报表服务器从2008 R2 32位升级到2014 32位。

我们已经链接了excel文件的服务器。 这些是.xls文件(尽pipe问题在更新到.xlsm时仍然存在)。 连接工作正常(select并插入); 但是,当我们运行一个存储过程来在Excel文件中创build一个新的选项卡时。

USE [SupplementaryReports] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[spExecute_ADODB_SQL] @DDL VARCHAR(8000), @DataSource VARCHAR(500), @Worksheet VARCHAR(200)=NULL, @ConnectionString VARCHAR(255) = 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source=%DataSource; Extended Properties=Excel 12.0' AS DECLARE @objExcel INT, @hr INT, @command VARCHAR(255), @strErrorMessage VARCHAR(255), @objErrorObject INT, @objConnection INT, @bucket INT SELECT @ConnectionString =REPLACE (@ConnectionString, '%DataSource', @DataSource) IF @Worksheet IS NOT NULL SELECT @DDL=REPLACE(@DDL,'%worksheet',@Worksheet) SELECT @strErrorMessage='Making ADODB connection ', @objErrorObject=NULL EXEC @hr=sp_OACreate 'ADODB.Connection', @objconnection OUT IF @hr=0 SELECT @strErrorMessage='Assigning ConnectionString property "' + @ConnectionString + '"', @objErrorObject=@objconnection IF @hr=0 EXEC @hr=sp_OASetProperty @objconnection, 'ConnectionString', @ConnectionString IF @hr=0 SELECT @strErrorMessage ='Opening Connection to XLS, for file Create or Append' IF @hr=0 EXEC @hr=sp_OAMethod @objconnection, 'Open' IF @hr=0 SELECT @strErrorMessage ='Executing DDL "'+@DDL+'"' IF @hr=0 EXEC @hr=sp_OAMethod @objconnection, 'Execute', @Bucket out , @DDL IF @hr<>0 BEGIN DECLARE @Source VARCHAR(255), @Description VARCHAR(255), @Helpfile VARCHAR(255), @HelpID INT EXECUTE sp_OAGetErrorInfo @objErrorObject, @source output, @Description output,@Helpfile output,@HelpID output SELECT @strErrorMessage='Error whilst ' +COALESCE(@strErrorMessage,'doing something')+', ' +COALESCE(@Description,'') RAISERROR (@strErrorMessage,16,1) END EXEC @hr=sp_OADestroy @objconnection GO 

我得到以下错误

消息15281,级别16,状态1,过程sp_OACreate,行116

SQL Server阻止了对组件“Ole Automation Procedures”的过程“sys.sp_OACreate”的访问,因为此组件作为此服务器的安全configuration的一部分被closures。 系统pipe理员可以使用sp_configure启用“Ole Automation Procedures”。 有关启用“Ole Automation Procedures”的更多信息,请在SQL Server联机丛书中search“Ole Automation Procedures”。

消息15281,级别16,状态1,过程sp_OADestroy,行116

SQL Server阻止对组件“Ole Automation Procedures”的过程“sys.sp_OADestroy”的访问,因为此组件作为此服务器的安全configuration的一部分被closures。 系统pipe理员可以使用sp_configure启用“Ole Automation Procedures”。 有关启用“Ole Automation Procedures”的更多信息,请在SQL Server联机丛书中search“Ole Automation Procedures”。

这个错误通常意味着特设的分布式查询是不够的。 但他们(都'显示高级选项'和'特设分布式查询'设置为1)。 我们也有提供程序Microsoft.ACE.OLEDB.12.0允许进程和dynamic参数激活。

excel文件与2008 R2完美配合。 代码本身并没有改变。 所有改变是升级到2014年。有没有人有任何build议? 你知道…除了不使用SQL连接到Excel文件,因为我们没有资源来改变它。

多谢!

最有可能的答案是奥莱自动化程序没有打开。 您可以通过运行来检查:

 EXEC sp_configure 'Ole Automation Procedures'; 

这将返回的东西沿线:

 name minimum maximum config_value run_value Ole Automation Procedures 0 1 0 0 

如果config_value为0,则需要启用它。

 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO 

来源 。