如何将 CSV 导入 SQL 并将文件名插入最后一列



我有很多CSV文件,我想使用BULK INSERT将它们导入MyTable。每次导入新文件时,我都想在最后一列"列名称与文件名"插入文件名。这些文件被命名为文件01.csv,文件02.csv等。

当我在导入第二个文件时尝试使用批量插入时,出现截断错误。可能是因为 CSV 表不适合 MyTable,其中已经是附加列。如何处理?

-- Add a column 'ColumnNameWithFileName' This code done only once ALTER TABLE dbo.MyTable ADD ColumnNameWithFileName VARCHAR(20) NULL
DECLARE CSVFileName VARCHAR(20) -- Bulk insert from CSV file Bulk insert dbo.[MyTable] from 'C:file01.CSV' with ( fieldterminator =';' ,rowterminator='n' ,FIRSTROW=2 ,CODEPAGE ='ACP')
-- Insert to new column file name UPDATE dbo.MyTable SET ColumnNameWithFileName = CSVFileName WHERE ColumnNameWithFileName IS NULL

使用变量作为文件名(如果需要,还可以使用文件路径)并批量插入到 #temp 表中,然后插入到最终表中,其中包含将具有文件路径的附加列。

declare @filename varchar(255)
set @filename = file.csv
CREATE TABLE #Temp
BULK INSERT #Temp 
from 'C:file01.CSV' with ( 
    fieldterminator =';'
    ,rowterminator='n'
    ,FIRSTROW=2
    ,CODEPAGE ='ACP')
insert into [REALFINALTABLE] 
select #temp.*, @filename as [FileName] from #Temp
--Drop #Temp (In case is not necesary any more)  

可能有一种更优雅的方法可以做到这一点,但你可以这样做;

  1. 将数据从文件导入到临时表中
  2. 选择*,文件名到你的表格
  3. 截断临时表
  4. 处理下一个文件

最新更新