我仍然是编写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
但我希望它只为从该特定文件名导入的记录设置filename属性。理想情况下,我希望决赛桌看起来与下面的类似。
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$]')
答案 0 :(得分: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$]')
作为标准评论,代码中为don't use SELECT *
。
答案 1 :(得分:0)
是的,您需要在现有表中设置带有外键的文件表,但如下所示:
tbl1 files table
id | path | description
tbl2 data table
id | fileId | col1value | col2value ... | colnvalue
希望这更清楚。