私はまだ SQL スクリプトの作成にかなり慣れていません。多数の Excel ファイルをインポートするスクリプトがあります (1000 以上に達する可能性があります)。これらの Excel スプレッドシートには、1 行しかないものもあれば、50 行を超えるものもあります。これらのすべての Excel スプレッドシートを 1 つのテーブルにインポートしていますが、レコードがどの Excel スプレッドシートからファイル名で取得されたかを識別する列を追加できるようにしたいと考えています。したがって、行 1 ~ 10 は ExcelSpreadsheetA.xlsx から取得され、行 11 ~ 15 は ExcelSpreadsheetB.xlsx から取得される可能性があります。インポート プロセス中にこの ID を設定できますか?
このスクリプトを使用して、Excel からのインポートを実行します。
select *
into SQLServerTable
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
私がやりたいのは、そのスクリプトの最後に次のようなロジックを追加することです。
update sqlservertable
set filename = testing.xls
しかし、その特定のファイル名からインポートされたレコードだけにファイル名属性を設定したいと思います。理想的には、最終的なテーブルが次のようになることを望みます。
Col1 Col2 Col3 Filename
===== ===== ===== =========
1 A B export1.xlsx
2 C D export1.xlsx
3 E F export1.xlsx
4 G H export5.xlsx
5 I J export8.xlsx
6 K L export8.xlsx
@Pondlife このスクリプトは、私がやりたいことを行います。
select *, 'file1.xls' as 'Filename'
into dbo.SQLServerTable
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]')
ただし、同じデータベースへの後続のインポートを取得できるようにする必要があります。使用しているスクリプトは次のとおりですが、エラーが発生しています。
INSERT INTO dbo.SQLServerTable
Select *, 'File2.xlsx' as 'FileName'
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\Convert\Converted\File2.xlsx;HDR=YES', 'SELECT * FROM [Worksheet$]')