1

これは私のラップトップの仕様です:

OS : Windows 7 - 64bit データベース : SQL SERVER 2008 R2 , Microsoft Office : Microsoft Office 2007,

私の問題は次のとおりです。Excel 2003 (xls) からデータベース (SQL Server 2008) にデータをインポートする手順を実行すると、次のエラーが発生します。

<span style="color:red">OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for 
      distributed queries because the provider is configured to run in 
      single-threaded apartment mode.</span>

これは私の手順です:

SELECT * FROM  OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\test.xls', 
                          'SELECT * FROM [Sheet1$]')

私は修正しようとしました:

AccessDatabaseEngine.exe をインストールします。

以下を SQL で実行します。

EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
EXEC sp_configure 'show advanced options', 1;
GO
EXEC sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1

、しかし、私はまだエラーが発生します。誰か助けてくれませんか?

4

1 に答える 1

1

OPENROWSET 関数の SQL クエリ :--

1) SQL Server Management Studio を開きます

2) クエリ パッドを開き、次のコマンドを記述します。

3) 拡張子が XLS のファイルである Excel 97 ~ 2003 ファイルの場合

SELECT * INTO [dbo].[Addresses]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]')

私。現在選択されているデータベースに Addresses という名前のテーブルが作成されます。

ii. Microsoft.Jet.OLEDB.4.0 は、変換に使用するドライバーです。

iii. パス付きの Excel ファイル - D:\SQL Scripts\msp.xls

iv。IMEX=1 プロパティが含まれており、混合データ型を含む列は文字列/テキスト データ型として扱われます。

v. HRD =Yes プロパティは、Excel ファイルの最上行が列ヘッダー名で構成されることを意味します

vi. Sheet1 は、インポートするシートの名前です

vii. Excel 8.0 では、97 – 2003 形式の Excel ファイルであると指定されています

4) フィルター クエリを使用するには、ユーザーは where 句をこのコマンドでも使用できます。

SELECT * INTO [dbo].[Addresses]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]') where [column_name]=’value’

5) 事前定義された SQL テーブルに Excel ファイルをコピーするには、次のような挿入コマンドで OPENROWSET 関数を使用します。

Create table Custom (Source_IP_ADD varchar(20),API_NAME varchar(50),COUNT_NO varchar(5),CLIENT_ID varchar(50),Date_OF_INVOKE varchar(50))

INSERT INTO [dbo].[Custom] ( [Source_IP_ADD], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_OF_INVOKE])

    SELECT [Source_IP_ADDR], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_INVOK] FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=D:\SQL Scripts\msp.xls;IMEX=1;HRD=Yes','SELECT * FROM [Sheet1$]')

6) 拡張子が XLSX のファイルである Excel 2007 ~ 2010 ファイルの場合

SELECT * INTO [dbo].[アドレス] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0' ,'Excel 12.0;データベース=D:\SQL Scripts\msp.xlsx;HDR=YES;IMEX=1' ,'SELECT * FROM [Sheet1$]')

私。現在選択されているデータベースに Addresses という名前のテーブルを作成します

ii. Microsoft.ACE.OLEDB.12.0 は、変換に使用するドライバーです。

iii. パス付きの Excel ファイル - D:\SQL Scripts\msp.xlsx

iv。IMEX=1 プロパティが含まれており、混合データ型を含む列は文字列/テキスト データ型として扱われます。

v. HRD =Yes プロパティは、Excel ファイルの最上行が列ヘッダー名で構成されることを意味します

vi. Sheet1 は、インポートするシートの名前です

vii. Excel 12.0 では、2007 ~ 2010 形式の Excel ファイルであると指定されています

7) 事前定義された SQL テーブルに Excel ファイルをコピーするには、次のような挿入コマンドで OPENROWSET 関数を使用します。

Create table Custom (Source_IP_ADD varchar(20),API_NAME varchar(50),COUNT_NO varchar(5),CLIENT_ID varchar(50),Date_OF_INVOKE varchar(50))

INSERT INTO [dbo].[Custom] ( [Source_IP_ADD], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_OF_INVOKE])
SELECT [Source_IP_ADDR], [API_NAME], [COUNT_NO], [CLIENT_ID], [Date_INVOK] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0' ,'Excel 12.0;Database=D:\SQL Scripts\msp.xlsx;HDR=YES;IMEX=1' ,'SELECT * FROM [Sheet1$]')
于 2012-03-28T08:57:08.487 に答える