bcp命令是SQL
Server提供的一个快捷的数据导入导出工具。使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据。bcp是SQL
Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。bcp可以将数据库的表或视图直接导出,也能通过SELECTFROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。
一、bcp的主要参数介绍
bcp共有四个动作可以选择。
1、导入。
这个动作使用in命令完成,后面跟需要导入的文件名。
2、导出。
这个动作使用out命令完成,后面跟需要导出的文件名。
3、使用SQL语句导出。
这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。
4、导出格式文件。
这个动作使用format命令完成,后而跟格式文件名。
下面介绍一些常用的选项:
-f format_file
format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。
-x
这个选项要和-f format_file配合使用,以便生成xml格式的格式文件。
-F first_row
指定从被导出表的哪一行导出,或从被导入文件的哪一行导入。
-L last_row
指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束。
-c
使用char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符。
-w
和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nchar做为存储类型。
-t field_term
指定字符分割符,默认是"\t"。
-r row_term
指定行分割符,默认是"\n"。
-S server_name[ \instance_name]
指定要连接的SQL Server服务器的实例,如果未指定此选项,bcp连接本机的SQL
Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。
-U login_id
指定连接SQL Sever的用户名。
-P password
指定连接SQL Server的用户名密码。
-T
指定bcp使用信任连接登录SQL Server。如果未指定-T,必须指定-U和-P。
-k
指定空列使用null值插入,而不是这列的默认值。
二、使用BCP导出数据
1、在Command窗口导出数据
bcp命令可以直接在Command窗口运行,你可以单击开始菜单——运行——cmd——进入Command窗口,然后输入你编写好的bcp语句。
1)导出整个表或视图
--使用可信连接导出整个表
bcp pTest.dbo.transinfo out c:\test.txt -c
-T
--使用密码连接导出整个表
bcp pTest.dbo.transinfo out c:\test.txt
-S"(local)" -U"sa" -P"sa" -c
2)使用SQL语句导出表或视图
--使用可信连接导出整个表
bcp “select * from pTest.dbo.transinfo" queryout
c:\test.txt -c -T
--使用密码连接导出整个表
bcp “select * from pTest.dbo.transinfo" queryout
c:\test.txt -S"(local)" -U"sa" -P"sa" -c
2、在查询分析器上导出数据
需要使用master..xp_cmdshell存储过程,需要先检查sqlserver的xp_cmdshell功能是否处于打开状态,可以通过如下命令来查看
exec sp_configure 'show advanced options'
name minimum
maximum config_value run_value
----------------------------------- ----------- ----------- ---------- -----------
show advanced options 0 1 0 0
如果config_value和
run_value的值为0,表明处于关闭状态(为1时为开启状态)。可以通过下列命令来开启:
exec sp_configure 'show advanced options',1
reconfigure
开启后的状态为:
name minimum maximum config_value
run_value
----------------------------------- ----------- -----------
------------ -----------
show advanced options 0 1 1
1
此时再检查“xp_cmdshell”是否处于开启状态,通过如下命令来查看:
exec sp_configure 'xp_cmdshell'
name minimum maximum config_value
run_value
----------------------------------- ----------- -----------
------------ -----------
xp_cmdshell 0 1
0 0
如果config_value和
run_value的值为0,表明处于关闭状态(为1时为开启状态)。可以通过下列命令来开启:
exec sp_configure 'xp_cmdshell',1
reconfigure
开启后的状态为:
name minimum maximum config_value
run_value
----------------------------------- ----------- -----------
------------ -----------
xp_cmdshell 0 1
1 1
当然你也可以进入sqlserver外围应用配置器——功能的外围应用配置器——选中xp_cmdshell——开启。也可以通过执行sql语句的方式打开xp_cmdshell功能,最后总的开启xp_cmdshell的sql语句为:
use master
exec sp_configure 'show advanced
options',1
reconfigure
exec sp_configure
'xp_cmdshell',1
reconfigure
1)导出整个表或视图
--使用可信连接导出整个表
exec master..xp_cmdshell 'bcp pTest.dbo.transinfo out
c:\test-12-14.txt -c -T'
--使用密码连接导出整个表
exec master..xp_cmdshell 'bcp pTest.dbo.transinfo out
c:\test.txt -S"(local)" -U"sa" -P"sa" -c'
2)使用SQL语句导出表或视图
--使用可信连接导出整个表
exec master..xp_cmdshell 'bcp "select * from
pTest.dbo.transinfo" queryout c:\test.txt -c
-T'
--使用密码连接导出整个表
exec master..xp_cmdshell 'bcp "select * from
pTest.dbo.transinfo" queryout c:\test.txt
-S"(local)" -U"sa" -P"sa" -c'
3)对表数据进行过滤导出
bcp不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数。通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。
exec master..xp_cmdshell 'bcp "select top 2* from
pTest.dbo.transinfo" queryout c:\test.txt
-S"(local)" -U"sa" -P"sa" -c'
bcp还可以通过简单地设置选项对导出的行进行限制。
exec master..xp_cmdshell 'bcp "select * from
pTest.dbo.transinfo" queryout c:\test.txt -F2 -L4
-S"(local)" -U"sa" -P"sa" -c'
表示从表所查询出来的结果中,取第2条到第4条数据进行导出。
4)使用BCP导出格式文件
bcp还可以通过-x选项生成xml格式的格式文件。xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。
exec master..xp_cmdshell 'bcp pTest.dbo.transinfo
format null -f c:\test.xml -x -c -T'
三、使用BCP导入数据
bcp可以通过in命令将上面所导出的test.txt再重新导入到数据库中和表transinfo的结构完全一样的表中。如果要导入的表没有主键约束时,也可以将数据直接导入到源表中。
--创建和transinfo结构相同的表transinfo1
select top 0 * into transinfo1 from transinfo
--将数据导入到transinfo1 表中
exec master..xp_cmdshell 'bcp pTest.dbo.transinfo1
in c:\test.txt -c -T'
--导入数据也同样可以使用-F和-L选项来选择导入数据的记录行。
exec master..xp_cmdshell 'bcp pTest.dbo.transinfo1
in c:\test.txt -F2 -L4 -c
-T'
在导入数据时可以根据已经存在的格式文件将满足条件的记录导入到数据库中,不满足则不导入。如上述的格式文件中的第三个字段的字符长度是24,如果某个文本文件中的相应字段的长度超过24,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入。
本文参考资料:http://chenjie./24029/7195/
/RascallySnake/archive//11/17/1880287.html