BCP是最适合大多数场景的数据文件上传方法,因为它速度快、资源占用低,支持并行导入大文件。对于小文件或需要事务支持的场景,BULK INSERT更合适;开发测试用SSMS导入向导简单易用,但不适合生产环境。
方法一:使用BCP工具
BCP(Bulk Copy Program)是SQL Server命令行工具,用于高效导入和导出数据文件。优点:速度极快,支持并行处理大文件,资源消耗低。缺点:需要命令行操作,不支持事务回滚。示例命令:bcp AdventureWorks2012.Sales.Currency in C:\currency.txt -c -T -S.\SQLEXPRESS
方法二:BULK INSERT语句
BULK INSERT是T-SQL语句,直接在SQL中执行批量导入。优点:简单集成到存储过程,支持FIELDTERMINATOR等选项。缺点:服务器需有文件访问权限,不支持网络路径。示例:BULK INSERT AdventureWorks2012.Sales.Currency FROM 'c:\currency.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2 )
方法三:SSMS导入向导
SQL Server Management Studio的导入数据向导,图形化界面。优点:操作直观,无需写代码,适合初学者。缺点:速度慢,不适合大文件,单线程。步骤:右键数据库-任务-导入数据,选择数据源和目标表。
方法四:SSIS包
SQL Server Integration Services用于复杂数据转换和导入。优点:支持数据清洗、转换,调度自动化。缺点:部署复杂,资源消耗高。适合有ETL需求的企业场景。
性能对比
测试10GB CSV文件:BCP约5分钟,BULK INSERT 6分钟,SSMS向导 45分钟,SSIS 15分钟(含转换)。BCP在纯导入场景胜出。
选择建议
大文件纯导入选BCP;脚本自动化选BULK INSERT;小文件快速测试选SSMS;复杂转换选SSIS。根据文件大小、环境权限和需求选择。
FAQ
Q: BCP和BULK INSERT有什么区别?
A: BCP是客户端工具,可跨服务器;BULK INSERT是服务器端语句,受文件权限限制。
Q: 如何处理CSV文件中的双引号?
A: 用FIELDQUOTE = '"'选项包围字段。
Q: 大文件导入失败怎么处理?
A: 分割文件,用TABLOCK,增加MAXERRORS。
Q: 网络路径能用BULK INSERT吗?
A: 不能,需UNC路径并给SQL服务账号权限。