我将报告服务器从2008 R2 32位升级到2014 32位。
我们已经链接了excel文件的服务器。这些是.xls文件(尽管问题在更新为.xlsm时仍然存在)。连接工作正常(选择& insert into);但是,当我们运行存储过程以在excel文件中创建新选项卡时。
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
我收到以下错误
Msg 15281,Level 16,State 1,Procedure sp_OACreate,Line 116
SQL Server阻止访问过程&#39; sys.sp_OACreate&#39;组件&#Ole;自动化程序&#39;因为此组件已作为此服务器的安全配置的一部分关闭。系统管理员可以启用“Ole自动化程序”的使用。通过使用sp_configure。有关启用“Ole自动化程序”的更多信息,请搜索“Ole Automation Procedures”&#39;在SQL Server联机丛书中。
Msg 15281,Level 16,State 1,Procedure sp_OADestroy,Line 116
SQL Server阻止访问过程&#39; sys.sp_OADestroy&#39;组件&#Ole;自动化程序&#39;因为此组件已作为此服务器的安全配置的一部分关闭。系统管理员可以启用“Ole自动化程序”的使用。通过使用sp_configure。有关启用“Ole自动化程序”的更多信息,请搜索“Ole Automation Procedures”&#39;在SQL Server联机丛书中。
此错误通常意味着临时分发的查询是不够的。但它们是(两者都显示高级选项&#39;以及&#39;临时分布式查询&#39;设置为1)。我们还有提供程序Microsoft.ACE.OLEDB.12.0,允许进程和动态参数启用。
excel文件与2008 R2完美配合。代码本身并没有改变。所有这一切都在升级到2014年。有没有人有任何建议?你知道...除了不使用SQL连接到excel文件,因为我们没有资源来改变它。
非常有责任!
答案 0 :(得分:2)
最可能的答案是 Ole Automation Procedures 未启用。您可以通过运行来检查:
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