介绍
在今天的数据库管理中,SQL Server是非常常见的数据库。而数据导入又是一个重要的环节。在之前的工作中,我们可能会用到SQL Server Management Studio (SSMS)或者其他开源数据导入工具。但是这些工具在一些特殊情况下有其限制,例如大批量数据的导入或当我们需要频繁对数据库进行更新操作时。因此,我们需要一种可靠、高效、易用的数据导入工具。这里我们介绍一个新一代的数据导入工具:bcp。
概述
bcp (bulk copy program)是SQL Server内置的一种命令行实用程序,它可以通过文本或二进制格式快速导入或导出数据。它支持各种数据类型和格式。bcp可以很好地处理大量数据,且运行速度非常快。在相同的机器上使用SSMS将数据插入到表中需要数分钟或数小时,但是使用bcp只需要几分钟到几秒钟。
下面我们就来介绍一下bcp的基本用法。
基本用法
格式
bcp {database_name.schema.table_name | "query"} {in|out} {data_file | nul}
[-n native type] [-c character type]
[-F first row] [-L last row]
[-b batch size] [-s "server name"] [-U username] [-P password]
[-i input_file] [-o output_file]
[-S [protocol:]server[\instance_name][,port]]
[-a packet size] [-d database name]
[-e err_file] [-f format_file]
[-g glop size] [-h"hint [,...n]"]
[-j login_timeout] [-k[ey]]
[-m maxerrors] [-M multisubnet failover]
[-N null value] [-q quoted identifier] [-r row terminator]
[-R native replace] [-T text or image size]
[-t field terminator] [-u] [-w] [-x trusted connection]
[-y sybase compatible identity insert]
参数
- `database_name.schema.table_name`:需要导入或导出的表的完整名称,格式为`database_name.schema.table_name`。
- `"query"`:需要导入或导出的查询。
- `in|out`:使用`in`代表导入数据,使用`out`代表导出数据。
- `data_file | nul`:数据文件的路径和名称。数据文件如果是二进制文件需要使用`-n`,如果是文本文件需要使用`-c`。如果数据文件不需要则使用`nul`代替。
- `-n native type`:指定将二进制文件格式导入或导出的数据类型。
- `-c character type`:指定将文本文件格式导入或导出的数据类型。
- `-F first row`:指定导出时的第一行数据。
- `-L last row`:指定导出时的最后一行数据。
- `-b batch size`:每批数据的大小。
- `-i input_file`:指定要导入的文件名称。
- `-o output_file`:指定导出的文件名称。
- `-S [protocol:]server[\instance_name][,port]`:指定的服务器和可选端口号。
- `-U username`:连接到服务器所需的用户名。
- `-P password`:连接到服务器所需的密码。
- `-a packet size`:指定发送到服务器的网络数据包的大小。
- `-d database name`:指定要连接的数据库。
- `-e err_file`:指定导出时出现错误后的输出文件名称。
- `-f format_file`:指定格式文件的完整路径和名称,或者导出格式文件的名称。
- `-g glop size`:指定在内存中复制数据的大小(只对导出有效)。
- `-h"hint [,...n]"`:指定导入时的服务器提示。
- `-j login_timeout`:指定登录到服务器的时间(以秒为单位)。
- `-k[ey]`:保留源文件主键顺序并不重复内容。
- `-m maxerrors`:指定允许出现的最大错误数。
- `-M multisubnet failover`:指定MultiSubnetFailover选项设置。
- `-N null value`:指定文本或字符列中的空值字符。
- `-q quoted identifier`:指定是否要启用已引号引用的标识符。
- `-r row terminator`:指定在导入或导出时使用的行分隔符。
- `-R native replace`:指定以原生格式替换文件中的特殊字符。
- `-T text or image size`:指定文本或图像数据的大小。
- `-t field terminator`:指定在导入或导出时使用的字段分隔符。
- `-u`:使用Unicode字符格式。
- `-w`:宽字符格式。
- `-x trusted connection`:使用Windows服务器身份验证。
- `-y sybase compatible identity insert`:当使用Sybase插入到标识列时是必需的。
示例
假设我们需要导入一个名为`logs`的表,它包含了如下字段:
- `Id`:自增长的整型。
- `Log`:文本类型。
数据文件中每行的数据格式为:
`id
我们可以使用以下命令来导入数据:
bcp DBName.dbo.logs in data.dat -c -t\t -S ServerName -U UserName -P Password
我们可以使用以下命令来导出数据:
bcp "select * from DBName.dbo.logs" queryout data.dat -c -t\t -S ServerName -U UserName -P Password
结束语
bcp是一个非常简单而又强大的工具,可以让数据导入变得更加简单。通过上述的介绍和示例,相信读者们已经熟悉了bcp的基本用法,并对数据导入有了更为深入的认识。