如何使用BCP导出整个数据库

如何使用BCP导出整个数据库,第1张

SQL Server BCP 导入导出使用 Bcp 导出导入数据高效,比使用SQL Server Management Stdio 提供的数据库导出导入要高效因为sql server 也没有提供提供类似oracle的expdp和impdp的工具,如果用SQL Server Management Stdio提供的导入导出对大表数据进行迁移速度太慢了

Bcp 导出数据高效比较适用于大表数据的迁移

进入doc命令行输入bcp命令,就d出bcp命令的帮助信息:

C:\Users\wangwei>bcp

用法: bcp {dbtable | query} {in | out | queryout | format} 数据文件

[-m 最大错误数] [-f 格式化文件] [-e 错误文件]

[-F 首行] [-L 末行] [-b 批大小]

[-n 本机类型] [-c 字符类型] [-w 宽字符类型]

[-N 将非文本保持为本机类型] [-V 文件格式版本] [-q 带引号的标识符]

[-C 代码页说明符] [-t 字段终止符] [-r 行终止符]

[-i 输入文件] [-o 输出文件] [-a 数据包大小]

[-S 服务器名称] [-U 用户名] [-P 密码]

[-T 可信连接] [-v 版本] [-R 允许使用区域设置]

[-k 保留 Null 值] [-E 保留标识值]

[-h"加载提示"] [-x 生成 xml 格式化文件]

参数介绍:

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导出数据

在控制台执行bcp:

bcp db_name.dbo.T_tablename out c:\a.txt -c -T

bcp db_name.dbo.T_tablename out c:\a.txt -c -Uusername -Pxxxxx

通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行bcp:

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -T' --"-T"信任连接

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -Usa -Pxxxxx'

说明:

-T指定 bcp 使用网络用户的安全凭据,通过信任连接连接到 SQL Server。不需要 login_id 和 password。

如果不是使用T需要加上-U和-P参数输入用户名和密码

如果是本地导入导出可以不加-S参数,如果连接到远程服务需要加-S参数

bcp db_name.dbo.tablename out d:\table.txt -c -q -S"120.26.76.220,1833" -U"sa" -P"password"

对要导出的表进行过滤。

bcp不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数,通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。

EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\table2.txt -c -U"sa" -P"password"'

bcp还可以通过简单地设置选项对导出的行进行限制。

这条命令使用了两个参数-F 2和-L 16,表示从SE

EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\currency2.txt -F 2 -L 16 -c -U"sa" -P"password"'

SELECT TOP 20 * FROM db_name.dbo.T_tablename所查出来的结果中取第2条到16条记录进行导出。

使用bcp导入数据

bcp可以通过in命令将bcp导出的文件导入到表中,首先需要创建表结构和导出数据的表结构相同

在控制台执行bcp:

bcp db_name.dbo.T_tablename in c:\a.txt-c -T

bcp db_name.dbo.T_tablename in c:\a.txt -c -Uusername -Pxxxxx

通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行bcp:

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt-c -T' --"-T"信任连接

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt -c -Usa -Pxxxxx'

SQL Server BCP 导入导出使用

Bcp 导出导入数据高效,比使用SQL Server Management Stdio 提供的数据库导出导入要高效因为sql server 也没有提供提供类似oracle的expdp和impdp的工具,如果用SQL Server Management Stdio提供的导入导出对大表数据进行迁移速度太慢了

Bcp 导出数据高效比较适用于大表数据的迁移

进入doc命令行输入bcp命令,就d出bcp命令的帮助信息:

C:\Users\wangwei>bcp

用法: bcp {dbtable | query} {in | out | queryout | format} 数据文件

[-m 最大错误数] [-f 格式化文件] [-e 错误文件]

[-F 首行] [-L 末行] [-b 批大小]

[-n 本机类型] [-c 字符类型] [-w 宽字符类型]

[-N 将非文本保持为本机类型] [-V 文件格式版本] [-q 带引号的标识符]

[-C 代码页说明符] [-t 字段终止符] [-r 行终止符]

[-i 输入文件] [-o 输出文件] [-a 数据包大小]

[-S 服务器名称] [-U 用户名] [-P 密码]

[-T 可信连接] [-v 版本] [-R 允许使用区域设置]

[-k 保留 Null 值] [-E 保留标识值]

[-h"加载提示"] [-x 生成 xml 格式化文件]

参数介绍:

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导出数据

在控制台执行bcp:

bcp db_name.dbo.T_tablename out c:\a.txt -c -T

bcp db_name.dbo.T_tablename out c:\a.txt -c -Uusername -Pxxxxx

通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行bcp:

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -T'--"-T"信任连接

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -Usa -Pxxxxx'

说明:

-T指定 bcp 使用网络用户的安全凭据,通过信任连接连接到 SQL Server。不需要 login_id 和 password。

如果不是使用T需要加上-U和-P参数输入用户名和密码

如果是本地导入导出可以不加-S参数,如果连接到远程服务需要加-S参数

bcp db_name.dbo.tablename out d:\table.txt -c -q -S"120.26.76.220,1833" -U"sa" -P"password"

对要导出的表进行过滤。

bcp不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数,通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。

EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\table2.txt -c -U"sa" -P"password"'

bcp还可以通过简单地设置选项对导出的行进行限制。

这条命令使用了两个参数-F 2和-L 16,表示从SE

EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\currency2.txt -F 2 -L 16 -c -U"sa" -P"password"'

SELECT TOP 20 * FROM db_name.dbo.T_tablename所查出来的结果中取第2条到16条记录进行导出。

使用bcp导入数据

bcp可以通过in命令将bcp导出的文件导入到表中,首先需要创建表结构和导出数据的表结构相同

在控制台执行bcp:

bcp db_name.dbo.T_tablename in c:\a.txt-c -T

bcp db_name.dbo.T_tablename in c:\a.txt -c -Uusername -Pxxxxx

通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行bcp:

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt-c -T'--"-T"信任连接

exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt -c -Usa -Pxxxxx'

从数据库中把所有表数据导出:

1.编辑一个文件selectout.sql:

set nocount on

use databasename

go

select 'bcp databasename..' + name + ' out d:\temp\' + name + '.txt -Uusername -Ppassword -Sservername -c ' from sysobjects where type='U'

go

2.在cmd中执行:

isql -Uusername -Ppassword -Sservername -i d:\selectout.sql -o d:\bcpout.bat

3.执行d:\bcpout.bat文件, 可以把数据导出到d:\temp\目录。

把所有表数据导入到数据库时,将上面的out改为in

4.bcp导入导出:

导出数据:

bcp DatabaseName.dbo.tableName out D:\tableName.txt -SServerName -Usa -P -c -b 10000

导入数据:

bcp DatabaseName.dbo.tableName in D:\tableName.txt -SServerName -Usa -P -c -b 10000

在导入大量数据时加上-b参数,分批提交不以致于数据库日志被塞满。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6741935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存