如何使用BULK INSERT将CSV数据批量插入带自增主键的SQL表?
嘿,我来给你一步步讲清楚怎么用BULK INSERT把CSV数据导入你的Table1里~
使用BULK INSERT批量导入CSV的完整步骤
1. 先确认CSV文件的格式要求
首先得保证你的CSV和Table1的列(Version, Date, Code)完全匹配,顺序不能乱,还要注意这些细节:
- 每行数据用逗号分隔(如果字段里本身有逗号,后面会说怎么处理)
- 日期必须是
YYYY-MM-DD格式,和你之前插入的一致,避免导入时日期转换报错 - 如果CSV第一行是表头(比如写了
Version,Date,Code),后续导入要记得跳过这一行
2. 编写适配你的表的BULK INSERT语句
这是核心部分,我已经给你适配好Table1的结构了,直接改文件路径就行:
BULK INSERT Table1 FROM 'C:\你的文件路径\你的数据文件.csv' -- 替换成你实际的CSV绝对路径 WITH ( FIELDTERMINATOR = ',', -- CSV默认的字段分隔符是逗号 ROWTERMINATOR = '\n', -- 行分隔符,Windows系统如果导入失败可以换成'\r\n'试试 FIRSTROW = 2, -- 如果你有表头就写2跳过第一行;没有表头就写1 TABLOCK, -- 加表锁能大幅提升批量导入的性能 -- 划重点:你的Id是IDENTITY自增列,数据库会自动生成,所以不需要从CSV导入,不用加KEEPIDENTITY参数 );
3. 必须注意的几个坑
- 权限问题:SQL Server的服务账号需要能读取你的CSV文件路径!如果是本地文件,要确保服务账号有该文件夹的读取权限;如果是网络共享文件,要用
\\服务器名\共享文件夹\文件.csv的格式,同时给服务账号开共享权限 - 数据类型匹配:CSV里的
Version和Code不能超过VARCHAR(10)的长度,比如Code要是有11位字符就会报错;日期必须是合法的YYYY-MM-DD格式,不能是MM/DD/YYYY这种 - 特殊字符处理:如果你的字段里包含逗号(比如
Code是AB,CD),那要在WITH里加QUOTE = '"'参数,同时CSV里要用双引号把这个字段包起来,比如"1.0","2018-04-16","AB,CD",这样逗号就不会被当成分隔符了 - 先测小批量:别上来就导全量数据,先拿几行测试数据跑一遍,没问题再导全部
4. 举个实际例子
假设你的CSV没有表头,内容是:
1.0,2018-04-17,9999 1.1,2018-04-18,8888 1.0,2018-04-19,7777
那对应的导入语句就是:
BULK INSERT Table1 FROM 'C:\Data\new_table1_data.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 1, TABLOCK );
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

