Excelスプレッドシートから内容が取得されるtblAccountsというテーブルがあります。
Windows 8.1(x64)でMS SQL Server 2008(x64)を使用しています
SQL Serverのインポート/エクスポートを使用してみましたWizardが、既存のテーブルを選択するオプションはなく、新しいテーブルを作成するオプションのみがあります。
OPENROWSETSなどの他の方法を使用してみました
INSERT INTO tblAccount SELECT * FROM OPENROWSET( 'Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\exceloutp.xls','SELECT * FROM [Sheet1$]')
しかし、私にエラーを与えました:
メッセージ7308、レベル16、状態1、行1 OLE DBプロバイダー 'Microsoft.Jet.OLEDB.4.0'は、プロバイダーがシングルスレッドアパートメントで実行するように構成されているため、分散クエリに使用できませんモード。
SQLサーバーの64ビットインスタンスが原因で発生したことが、いくつかの調査でわかりました。
問題は、SQLテーブルへのこのExcelデータ転送は、SQL Import/Export Wizardのみを使用して実行する必要があることです。
新しいスプレッドシートを作成せずに既存のSQLテーブルにExcelスプレッドシートをインポートするにはどうすればよいですか?
私が訪れたいくつかのリンクは、私の問題を解決するのを助けることができませんでした:
サウダーテ、別の問題を探してこれに出くわしました。間違いなく、SQL Serverインポートウィザードを使用して、新しいテーブルにデータをインポートできます。もちろん、そのテーブルをデータベースに残したくないので、新しいテーブルにインポートし、Query Managerでデータをスクリプト化して既存のテーブルに挿入することをお勧めします。スクリプトを正常に完了したときの最後のステップとして、インポートウィザードによって作成された一時テーブルを削除する行を追加できます。
元の問題は実際には64ビットのSql Serverに関連しており、32ビットのExcelを使用しているため、これらのドライバーがうまく連携しないことが原因だと思います。最初に64ビットExcelを使用したときに、非常によく似た問題が発生しました。
これにより、ExcelシートからSQLテーブルにデータをコピーして貼り付けることができます。
注:多くの場合、テーブルには、自動生成/インクリメントされたIDを持つID列である最初の列があります。データを貼り付けると、Excelで選択されている左端の列がSSMSの左端の列に挿入され、ID列にデータが挿入されます。これを回避するには、SSMSでその列をスキップするために、選択の左端に空の列を保持します。その結果、SSMSは自動生成IDであるデフォルトデータを挿入します。
さらに、Excelシート選択でスキップする列と同じ順序位置に空の列を置くことにより、他の列をスキップできます。これにより、SSMSはデフォルト値(またはデフォルト値が指定されていない場合はNULL)を挿入します。
インポートデータをウィザードで使用して、宛先テーブルを選択できます。
ウィザードを実行します。ソーステーブルとビューウィンドウを選択すると、2つの部分が表示されます。ソースと宛先。
[Destination part]の下のフィールドをクリックしてドロップダウンを開き、目的のテーブルを選択し、必要に応じてそのマッピングを編集します。
これを行うソフトウェアツールが必要な場合は、次のステップバイステップガイドをご覧ください。
「Excelスプレッドシートを検証してSQL Serverデータベースにインポートする方法」