如何使用sqlcmd将CSV文件中的数据导入到SQL数据库表中
sqlcmd导入本地CSV到SQL Server指定表的实现方案
sqlcmd本身没有内置直接导入CSV的参数,通常搭配SQL原生的BULK INSERT语句或者bcp工具实现需求,两种常用方案如下:
方案1:直接用sqlcmd执行BULK INSERT语句
你可以直接把导入逻辑写在SQL语句里,通过sqlcmd的-Q参数执行,示例命令如下:
sqlcmd -S ipdb -U sa -P "passwordsa" -d dbname -Q "BULK INSERT 你的目标表名 FROM 'C:\本地路径\你的文件.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2, CODEPAGE = '65001' )"
参数说明:
-S/-U/-P/-d参数和你导出时的用法完全一致,直接替换成你自己的数据库连接信息即可FIELDTERMINATOR:CSV的字段分隔符,和你导出时用的逗号保持一致即可,用其他分隔符可以自行修改ROWTERMINATOR:CSV的行分隔符,Windows生成的CSV如果导入报错可以改成'\r\n'FIRSTROW:指定从CSV的第几行开始导入,如果CSV第一行是表头填2,没有表头填1CODEPAGE:CSV文件的编码,UTF-8填65001,GBK填936
方案2:搭配bcp工具导入(更适合本地文件导远程库场景)
如果你的SQL Server是远程部署的,BULK INSERT要求CSV必须放在远程服务器可访问的路径,这时候可以用SQL Server自带的bcp工具,直接读取本地CSV导入到远程库,示例命令如下:
bcp 库名.dbo.你的目标表名 in "C:\本地路径\你的文件.csv" -S ipdb -U sa -P "passwordsa" -c -t, -r\n -F2
参数说明:
-c:指定用字符类型格式导入,适配绝大多数普通CSV场景,无需额外做类型映射-t,:指定字段分隔符为逗号,可按需修改-r\n:指定行分隔符为换行符,Windows CSV可改成-r\r\n-F2:从第二行开始导入,没有表头可以改成-F1
注意:导入前建议先备份目标表数据,避免因字段类型不匹配、分隔符错误导致的脏数据问题。如果CSV有特殊字符、空值处理的需求,可以额外在WITH配置里添加相关参数适配。
内容的提问来源于stack exchange,提问作者Preman Terminal
相关产品推荐
相关产品推荐

