sqlserver大表数据导入导出【bcp命令】

前言

一般情况下,我们在迁移表结构和数据时,是使用数据库工具提供的结构同步或数据同步功能,来迁移数据库或保证不同服务器数据库结构和数据的一致。但特殊情况下,比如网络不通的情况下,我们要迁移大表的数据,则只能先把大表数据导出成脚本或文件,然后再在目标服务器执行导入。本文我们主要使用bcp命令(Bulk Copy Program)来说明,如何通过bcp命令来完成大表数据的导入和导出操作。

bcp命令说明

bcp导出命令

bcp "SELECT * FROM YourTable" queryout C:\YourFile.dat -c -T -S YourServerName -d databaseName

将YourTable表中选取所有列,并将结果保存到YourFile.dat文件中。
-c参数指定输出格式为字符型;
-T参数指示使用Windows身份验证登录服务器;
-S参数后面应该提供服务器名称或IP地址;
-d参数指定数据库名称;

bcp导入命令

bcp YourTable IN C:\YourFile.dat -c -T -S YourServerName -d databaseName

将YourFile.dat文件中的内容导入到名为YourTable的表中。

bcp命令使用示例

bcp命令导出示例

-- bcp导出命令:将smaple数据库下temp_info表数据导出到temp_info.dat文件
bcp "SELECT * FROM temp_info" queryout "D:\test\temp_info.dat" -c -T -S localhost -d smaple

执行过程:

D:\test>bcp "SELECT * FROM temp_info" queryout "D:\test\temp_info.dat" -c -T -S localhost -d smaple

开始复制...
已成功将 1000 行大容量复制到主文件。总共接收到: 1000
已成功将 1000 行大容量复制到主文件。总共接收到: 2000
已成功将 1000 行大容量复制到主文件。总共接收到: 3000
已成功将 1000 行大容量复制到主文件。总共接收到: 4000
已成功将 1000 行大容量复制到主文件。总共接收到: 5000
已成功将 1000 行大容量复制到主文件。总共接收到: 6000
已成功将 1000 行大容量复制到主文件。总共接收到: 7000
已成功将 1000 行大容量复制到主文件。总共接收到: 8000
已成功将 1000 行大容量复制到主文件。总共接收到: 9000
...
已成功将 1000 行大容量复制到主文件。总共接收到: 251000
已成功将 1000 行大容量复制到主文件。总共接收到: 252000
已成功将 1000 行大容量复制到主文件。总共接收到: 253000
已成功将 1000 行大容量复制到主文件。总共接收到: 254000
已成功将 1000 行大容量复制到主文件。总共接收到: 255000
已成功将 1000 行大容量复制到主文件。总共接收到: 256000
已成功将 1000 行大容量复制到主文件。总共接收到: 257000

已复制 257392 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 1125   平均值: (每秒 228792.89 行。)

D:\test>

从以上导出日志看,导出temp_info表总数257392行,用时1125毫秒,速度还是相当快的。

bcp命令导入示例

-- bcp导入命令:将temp_info.dat文件数据导入到smaple数据库的temp_info表
bcp temp_info in "D:\test\temp_info.dat" -c -T -S localhost -d smaple

执行过程:

D:\test>bcp temp_info in "D:\test\temp_info.dat" -c -T -S localhost -d smaple

开始复制...
已向 SQL Server 发送了 1000 行。总共发送了: 1000
已向 SQL Server 发送了 1000 行。总共发送了: 2000
已向 SQL Server 发送了 1000 行。总共发送了: 3000
已向 SQL Server 发送了 1000 行。总共发送了: 4000
已向 SQL Server 发送了 1000 行。总共发送了: 5000
已向 SQL Server 发送了 1000 行。总共发送了: 6000
已向 SQL Server 发送了 1000 行。总共发送了: 7000
已向 SQL Server 发送了 1000 行。总共发送了: 8000
已向 SQL Server 发送了 1000 行。总共发送了: 9000
...
已向 SQL Server 发送了 1000 行。总共发送了: 251000
已向 SQL Server 发送了 1000 行。总共发送了: 252000
已向 SQL Server 发送了 1000 行。总共发送了: 253000
已向 SQL Server 发送了 1000 行。总共发送了: 254000
已向 SQL Server 发送了 1000 行。总共发送了: 255000
已向 SQL Server 发送了 1000 行。总共发送了: 256000
已向 SQL Server 发送了 1000 行。总共发送了: 257000

已复制 257392 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 3500   平均值: (每秒 73540.57 行。)

D:\test>

从以上导入日志看,导入temp_info表总数257392行,用时3500毫秒,速度也挺快。

参考
bcp语法及参数详细说明:
https://learn.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-ver16

最后修改于:2024年02月27日 20:07

添加新评论