2016-12-14 14 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 

は、私は次のエラー

にSQL Serverは、プロシージャへのアクセスコンポーネントの 'sys.sp_OACreate' 'をブロックされた116

メッセージ15281、レベル16、状態1、プロシージャsp_OACreate、ラインを取得しますこのコンポーネントはこのサーバーのセキュリティ構成の一部としてオフになっているため、「Ole Automation Procedures」と表示されます。システム管理者は、sp_configureを使用して 'Ole Automation Procedures'の使用を有効にすることができます。 'Ole Automation Procedures'を有効にする方法の詳細については、SQL Server Books Onlineの「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 Books Onlineの「Ole Automation Procedures」を検索してください。

このエラーは、多くの場合、アドホッククエリが十分ではないdistribtuedことを意味します。しかし、それらは(両方の '高度なオプションを表示する'と 'ad hoc distributed queries'は両方とも1に設定されています)。また、Microsoft.ACE.OLEDB.12.0プロバイダには、プロセスで許可と動的パラメータが有効になっています。

Excelファイルは2008 R2と完全に機能します。コード自体は変更されていません。変更されたすべてが2014年にアップグレードされています。誰にも提案はありますか?あなたは知っている...私たちはそれを変更するためのリソースがないので、ファイルをExcelに接続するためにSQLを使用していない。

多くの義務付け!

答えて

1

最も可能性の高い回答はです。Ole Automation Proceduresはオンになっていません。あなたは実行することで確認することができます。config_valueは、あなたがそれを有効にする必要が0である場合

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

EXEC sp_configure 'Ole Automation Procedures'; 

これは、の線に沿って何かを返します。

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

Source

+0

ありがとうございました!それはすぐにうまくいった。私はあなたにたくさんのトカゲを買うつもりです! – Pleiades

関連する問題