如何将 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
可能有更优雅的方法,但您可以这样做;
- 将文件中的数据导入临时文件 table
- select *,FileName into YourTable
- 截断你的温度table
- 处理下一个文件
使用变量作为文件名(如果需要,还可以使用文件路径)并批量插入到#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)
我有很多 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
可能有更优雅的方法,但您可以这样做;
- 将文件中的数据导入临时文件 table
- select *,FileName into YourTable
- 截断你的温度table
- 处理下一个文件
使用变量作为文件名(如果需要,还可以使用文件路径)并批量插入到#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)