我有很多CSV文件,我想使用BULK INSERT将它们导入MyTable。每次我导入一个新文件时,我想插入最后一列'ColumnNameWithFileName'文件的名称。这些文件的名称类似于file01.csv,file02.csv等。
当我尝试在导入第二个文件时使用BULK INSERT时出现截断错误。可能是因为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
答案 0 :(得分:1)
可能有一种更优雅的方式,但你可以这样做;
答案 1 :(得分:1)
使用变量作为文件名(和文件路径,如果需要)并批量插入到#temp表中,然后INSERT INTO final 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)