SQL Server 2014 - 链接的Excel文件

时间:2016-12-14 15:53:25

标签: sql-server excel stored-procedures

我将报告服务器从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文件,因为我们没有资源来改变它。

非常有责任!

1 个答案:

答案 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 

Source