2016-12-14 19 views
0

我正在將報表服務器從2008 R2 32位升級到2014 32位。SQL Server 2014 - 鏈接Excel文件上的錯誤15281

我們鏈接了excel文件的服務器。這些是.xls文件(儘管問題在更新到.xlsm時仍然存在)。連接工作正常(選擇&插入);但是,當我們運行存儲過程在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 + '"', 
     @[email protected] 
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 "'[email protected]+'"' 
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阻止訪問程序的組件 'sys.sp_OACreate''奧萊自動化程序「,因爲這個組件被關閉,作爲這個服務器的安全配置的一部分。系統管理員可以使用sp_configure啓用'Ole Automation Procedures'。有關啓用'Ole Automation Procedures'的更多信息,請在SQL Server聯機叢書中搜索'Ole Automation Procedures'。

消息15281,級別16,狀態1,過程sp_OADestroy的,線116

SQL Server阻止訪問過程部件「OLE自動化過程」的「sys.sp_OADestroy」,因爲該組件被關閉爲一體的部此服務器的安全配置。系統管理員可以使用sp_configure啓用'Ole Automation Procedures'。有關啓用'Ole Automation Procedures'的更多信息,請在SQL Server聯機叢書中搜索'Ole Automation Procedures'。

這個錯誤通常意味着特設的分佈式查詢是不夠的。但他們(都'顯示高級選項'和'特設分佈式查詢'設置爲1)。我們還有提供程序Microsoft.ACE.OLEDB.12.0,並允許啓用進程和動態參數。

excel文件與2008 R2完美配合。代碼本身沒有改變。所有改變都升級到2014年。有沒有人有任何建議?你知道......除了沒有使用SQL來連接到excel文件,因爲我們沒有資源來改變它。

非常感謝!

回答

1

最可能的答案是奧雷自動化程序未打開。您可以通過運行檢查:

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

+0

謝謝!這工作很快。我要給你買這麼多蜥蜴! – Pleiades