0

私はまだ 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$]')
4

2 に答える 2

1

クエリがすでに機能していると仮定してSELECT、列リストの最後にファイル名を追加するだけです。

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$]')

また、標準のコメントとして、コードで使用しないでください。SELECT *

于 2012-12-17T19:52:14.950 に答える
0

はい、次のように、既存のテーブルに外部キーを持つファイル テーブルを設定する必要があります。

tbl1 files table
id | path | description

tbl2 data table
id | fileId | col1value | col2value ... | colnvalue

これがより明確であることを願っています。

于 2012-12-17T04:46:01.690 に答える