2012-01-11 21 views
-1

Excelからデータベースにデータをインポートする必要があります。自分のExcelシートのデータをデータベースの既存のテーブルに挿入する必要があります。SQL Server 2008にExcelデータをインポートする

私はSQLウィザードの助けを借りてデータをインポートしようとしました。まず、それを一時テーブルにインポートしてから、挿入クエリを使用してデータをターゲットテーブルにインポートしました。しかし、それは正しく機能していないようです。

だから、plzは私にデータをインポートする良い方法を提案します。また、インポートするための良いSQLスクリプトをいくつかお勧めします。

+1

スプレッドシートにあるどのように多くの列? – Sparky

+1

「何が罰金ではないのですか」とはどういう意味ですか?何かうまくいった? – Blanthor

答えて

0

あなたの既存のテーブルとテーブルのキーについては何も言及し、これだけ次のコマンドはxltest.xlsファイルシートからすべてのデータを選択し、あなたにプッシュを与えるために、ファイルをエクセルませんでした(「customrs」)を

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

この時点から、既存のデータをインポート/マージする方法はデータベース構造に依存します。

1

私はその後、.xls(97-2003バージョン)としてスプレッドシートを保存して再度試してみました.xlsxファイルの前の回答(バージョン14.0.6112.2500 64ビットのMicrosoft Excelファイル)

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\xls_to_sql\xltest.xlsx', [Sheet1$]) 

を使用してみました。

Msg 7308, Level 16, State 1, Line 1 
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. 

SQLサーバー情報:

のMicrosoft SQL Server Management Studioを10.50.1617.0マイクロソフト Analysis Servicesのクライアントツール10.50.1617.0

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

ボット時間は、私は、同じエラーメッセージが表示されましたMicrosoftデータアクセス コンポーネント(MDAC)6.1.7601.17514 Microsoft MSXML 2.6 3.0 6.0 Microsoft Internet Explorer 9.0.8112.16421 Mi crosoft .NET Frameworkの 2.0.50727.5448オペレーティングシステム6.1.7601

私はMicrosoft.Jet.OLEDB.4.0を持っていないか、少なくとも私はそれを取得する方法がわかりません。それが問題の原因であれば、32ビットモードですべてを実行する方法もわかりません。何らかの理由でインストールされていない場合は、32ビットモードで動作し、Microsoft.Jet.OLEDB.4.0をダウンロードしてインストールすることをお勧めします。

SQL Server 2005用に公開されたが、チュートリアルで言及されたMicrosoft.Jet.OLEDB.4.0オプションはありません。 http://support.microsoft.com/kb/321686を参照してください。

0

は、まずスプレッドシートを.xls(97-2003バージョン)形式で保存し、一時ファイルでSQLにインポートします。インポート後、これらのデータは、テンポラリテーブルのフィールドの長さが元のものと同じであることを確認します。

その後、私は通常これを行う3つの方法があります

insert into orginal (field1, field2) 
select field1, field2 from temp 
0

orginalテーブルを更新するためのステートメントの下に使用します。

  1. ワークシート内でVBAを使用します。これは、あなたがこれを一度だけやっているならば、多大な労力を要するいくつかの開発作業を必要とします。このワークシートを複数回使用する場合は、これが便利です。
  2. ワークシート内のマクロの組み合わせを使用して、 をSQL Management Studioに貼り付けるか、 類似のSQLクライアントに貼り付けて、挿入を実行します。
  3. I はこのように、ワークシートから変換することになる、CSVファイルをコピーするための一括コピーコマンドラインツールを使用します。bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
3

ファイルについて2007年バージョン(* .xlsx形式の)

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=D:\test.xlsx', [Customer$]) 
エクセルファイルの場合

あなたは、64ビットのSQL Serverにの.xlsxをインポートする必要がある場合は、インストールしてみてください97-2003バージョン(* .XLS)

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\test.xls', [Customer$]) 
+1

[Customer $] –

+0

とは何ですか?@AlirezaMassali [Customer $]はファイルtest.xlsのシート名です – Fauzi88

0

エクセル64 bit Microsoft Accessデータベースエンジン。

Cからデータをインポートするために、例えばhttp://www.microsoft.com/en-us/download/details.aspx?id=13255

を参照してください:\ data.xlsx、のMyDataと呼ばれるシートを持っている、あなたは使用することができます:

SELECT * 
    FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0' 
        , 'Excel 12.0;database=c:\data.xlsx;IMEX=1' 
        , 'SELECT * FROM [MyData$]') 
関連する問題