データをインポートできるようにするには、Excel テンプレートを別のフォルダーにコピーする必要があります。以下は、私が使用している2つのSQLステートメントです。
ステートメント 1:
exec xp_cmdshell 'copy C:\inetpub\wwwroot\app_data\export_templates\myExport.xlsx C:\inetpub\wwwroot\app_data\tmp\myExport130301172218.xls'
ステートメント 2:
insert into
OPENROWSET('Microsoft.ACE.OLEDB.12.0'
, 'Excel 12.0;Database=C:\inetpub\wwwroot\app_data\tmp\myExport130301172218.xls;'
, 'SELECT * FROM [Sheet1$]')
SELECT * FROM vw_shrub
上記の SQL ステートメントを個別に実行すると、正常に動作します。しかし、それらを一緒に実行すると、次のエラーが発生します。
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" は、"Microsoft Access データベース エンジンはオブジェクト 'Sheet1$' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とスペルを確認してください。パス名を正しく入力してください。'Sheet1$' がローカル オブジェクトでない場合は、ネットワーク接続を確認するか、サーバー管理者に連絡してください。".
メッセージ 7350、レベル 16、状態 2、行 2
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.ACE.OLEDB.12.0" から列情報を取得できません。
問題は、アプリケーションから両方を単一のリクエストとして渡したいことです。したがって、それらを一緒に実行する必要があります。それらの間にGOを追加すると、Management Studioでそれらを一緒に実行できることがわかりました。しかし、アプリケーションからリクエストを渡すと、GO を使用できません。