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

How to import CSV to SQL and insert file name to the last column?

我有很多 CSV 文件,我想使用 BULK INSERT 将它们导入 MyTable。每次导入新文件时,我都想在最后一列 'ColumnNameWithFileName' 中插入文件名。这些文件的命名方式如 file01.csv、file02.csv 等

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

--添加一列'ColumnNameWithFileName'这段代码只做一次 改变 TABLE dbo.MyTable 添加 ColumnNameWithFileName VARCHAR(20) NULL
声明 CSV 文件名 VARCHAR(20) -- 从 CSV 文件批量插入 批量插入 dbo.[MyTable] 来自 'C:\file01.CSV' 和 ( 字段终止符=';' ,rowterminator='\n' ,第一行=2 ,代码页='ACP')
-- 插入到新的列文件名 更新 dbo.MyTable 设置 ColumnNameWithFileName = CSVFileName WHERE ColumnNameWithFileName 为 NULL

可能有更优雅的方法,但您可以这样做;

  1. 将文件中的数据导入临时文件 table
  2. select *,FileName into YourTable
  3. 截断你的温度table
  4. 处理下一个文件

使用变量作为文件名(如果需要,还可以使用文件路径)并批量插入到#temp table,然后插入最终 table 和一个附加列,该列将包含文件路径。

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)