我有很多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)
可能有一种更优雅的方法可以做到这一点,但你可以这样做;
- 将数据从文件导入到临时表中
- 选择*,文件名到你的表格
- 截断临时表
- 处理下一个文件