4

我有数百个要导入数据库表的 .xlsx 文件。我在 csv 文件中有文件的名称。我想循环遍历该 csv 文件,以使这数百个文件的导入过程更加简单。

这是我当前插入的脚本,我必须为每个文件写出。

INSERT INTO TableName Select *, 'FileName' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

我的问题是我必须为每个不同的文件名重复/更改此语句数百甚至数千次。

所以接下来的几个语句看起来像这样。

INSERT INTO TableName Select *, 'FileName2' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName2.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

INSERT INTO TableName Select *, 'FileName3' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName3.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

INSERT INTO TableName Select *, 'FileName4' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName4.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

INSERT INTO TableName Select *, 'FileName5' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName5.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')

...

INSERT INTO TableName Select *, 'FileName700' as 'SurveyName' 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\FileName700.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]')
4

1 回答 1

1

请将C:\work\替换为 1000 of *.xlsx 所在的文件夹名称。修改后在 SSMS 中运行以下脚本。

脚本

   -- Create temp table
    create table #files  (ID int IDENTITY, FileName varchar(100))

    BULK
    INSERT #files 
    FROM 'c:\test.csv'
    WITH
    (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
    )

    select  
    'INSERT INTO TableName Select *, ''' + FileName + ''' as ''SurveyName'' 
    FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
    ''Excel 12.0;Database=C:\work\' + FileName + ';HDR=YES'', ''SELECT * FROM [Sheet1$]'')' as 'InsertSql'
     from #files
-- Drop temp table
Drop table #files

结果将为您提供每个 .xlsx 文件的 instert 语句。将这些语句复制/粘贴到 SSMS 并执行 (F5) 以加载数据。

INSERT INTO TableName Select *, 'Files1.xls' as 'SurveyName'   FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',  'Excel 12.0;Database='C:\work\Files1.xls';HDR=YES', 'SELECT * FROM [Sheet1$]')
INSERT INTO TableName Select *, 'Files2.xls' as 'SurveyName'   FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',  'Excel 12.0;Database='C:\work\Files2.xls';HDR=YES', 'SELECT * FROM [Sheet1$]')

复制和粘贴

于 2013-02-06T16:19:08.740 回答