0

我对编写 SQL 脚本还是很陌生。我有一个脚本可以导入大量的 excel 文件(可能达到 1000+)。有些 Excel 电子表格只有一行,有些则超过 50 行。我将所有这些 excel 电子表格导入到一个表中,并希望能够添加一列,该列通过文件名标识记录来自哪个 Excel 电子表格。因此,第 1 到第 10 行可能来自 ExcelSpreadsheetA.xlsx,第 11 到第 15 行可能来自 ExcelSpreadsheetB.xlsx。我可以在导入过程中设置此标识吗?

我使用此脚本从 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 回答