加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用BCP导入导出数据

发布时间:2020-12-12 15:37:02 所属栏目:MsSql教程 来源:网络整理
导读:本人第一次写原创文章 。。(一开始部分是转载 我不想累赘说很多网上有的 下面是我自己写的我遇到的问题) ? BCP 是 SQL?Server 中负责导入导出数据的一个命令行工具,它是基于 DB-Library 的,并且能以并行的方式高效地导入导出大批量的数据 ? BCP 除了可以在

本人第一次写原创文章 。。(一开始部分是转载 我不想累赘说很多网上有的 下面是我自己写的我遇到的问题)

?

BCPSQL?Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据

?

BCP除了可以在控制台执行外,还可以通过调用SQL?Server的一个系统存储过程xp_cmdshellSQL语句的方式运行BCP。如:EXEC?master..xp_cmdshell?'BCP?NTS.dbo.T_User?out?c:/User.txt?-c?-U"sa"?-P"password"'

?

1.?四个动作

?

01.?导入:这个动作使用IN命令完成,后面跟需要导入的文件名

?

02.?导出:这个动作使用OUT命令完成,后面跟需要导出的文件名,数据源是表或者视图

?

03.?使用SQL语句导出:这个动作使用QueryOut命令完成,跟OUT类似,数据源是SQL语句

?

04.?导出格式文件:这个动作使用Format命令完成,后而跟格式文件名

?

2.?常用的选项

?

01.?-f?Format_File

?

Format_File表示格式文件名。这个选项依赖于上述的动作,如果使用的是INOUTFormat_File表示已经存在的格式文件,如果使用的是Format则表示是要生成的格式文件

?

02.?-x

?

这个选项要和-f?Format_File配合使用,以便生成XML格式的格式文件

?

03.?-F?First_Row

?

指定从被导出表的哪一行导出,或从被导入文件的哪一行导入

?

04.?-L?last_Row

?

指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束

?

05.?-c

?

使用Char类型做为存储类型,没有前缀且以"/t"做为字段分割符,以"/n"做为行分割符

?

06.?-w

?

-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nChar做为存储类型

?

07.?-t?Field_Term

?

指定字符分割符,默认是"/t"

?

08.?-r?Row_Term

?

指定行分割符,默认是"/n"

?

09.?-S?Server_Name[?/Instance_Name]

?

指定要连接的SQL?Server服务器的实例,如果未指定此选项,BCP连接本机的SQL?Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可

?

10.?-U?Login_ID

?

指定连接SQL?Sever的用户名

?

11.?-P?Password

?

指定连接SQL?Server的用户名密码

?

12.?-T

?

指定BCP使用信任连接登录SQL?Server。如果未指定-T,必须指定-U-P

?

13.?-k

?

指定空列使用NULL值插入,而不是这列的默认值

01.?导出整个表或视图

?

BCP?NTS.dbo.T_User?out?c:/User.txt?-c?-U"sa"?-P"password"?--使用密码连接(用户名和密码需要加上双引号)

?

BCP?NTS.dbo.T_User?out?c:/User.txt?-c?-T?--使用信任连接

?

02.?导出SQL语句的目标数据

?

BCP?"SELECT?TOP?20?*?FROM?NTS.dbo.T_User"?queryout?c:/User.txt?-c?-U"sa"?-P"password"

?

BCP?"SELECT?TOP?20?*?FROM?NTS.dbo.T_User"?queryout?c:/User.txt?-F?10?-L?13?-c?-U"sa"?-P"password"?--导出第10条到13条记录

?

03.?导出格式文件

?

BCP?NTS.dbo.T_User?format?nul?-f?c:/User_format1.fmt?-c?-T?--把表结构信息导出到User_format1.fmt

?

BCP?NTS.dbo.T_User?format?nul?-f?c:/User_format2.fmt?-x?-c?-T?--把表结构信息导出XML

?

04.?导入数据

?

在导入数据时可以根据已经存在的格式文件将满足条件的记录导入到数据库中,不满足则不导入。如上述的格式文件中的第三个字段的字符长度是24,如果某个文本文件中的相应字段的长度超过24,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入

?

BCP?NTS.dbo.T_User?in?c:/User1.txt?-c?-T

?

BCP?NTS.dbo.T_User?in?c:/User1.txt?-c?-F?10?-L?13?-T?--导入时也可使用-F-L选项来选择目标数据

?

BCP?NTS.dbo.T_User?in?c:/User1.txt?-F?10?-L?13?-c?-f?c:/User_format1.fmt?-T?--使用普通的格式文件

?

BCP?NTS.dbo.T_User?in?c:/User1.txt?-F?10?-L?13?-c?-x?-f?c:/User_format2.fmt?-T?--使用XML格式的格式文件

?

05.?实际导出的例子

?

EXEC?master..xp_cmdshell?'BCP?SZC.dbo.T_User?out?c:/test1.csv?-c?-U"sa"?-P"qwert1"'?--使用密码连接

?

EXEC?master..xp_cmdshell?'BCP?SZC.dbo.T_User?out?c:/test1.csv?-c?-T'?--使用信任连接

?

4.?其他方法导入导出数据

?

01.?导入数据

?

SELECT?*?INTO?authors1

FROM?OPENDATASOURCE('SQLOLEDB',?'Data?Source=192.1.1.2;?UserID=sa;?Password=qwert1').pubs.dbo.authors

?

02.?导出数据

?

INSERT?INTO?OPENDATASOURCE('SQLOLEDB',?'Data?Source=192.1.1.2;?UserID=sa;?Password=qwert1').test.dbo.authors

SELECT?*?FROM?pubs.dbo.authors

?

INSERT?INTO?OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:/')[data#txt]?SELECT?*?FROM?text1

?

INSERT?INTO?OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:/',?[data#txt])?SELECT?*?FROM?text1

?

03.?导入Excel数据

?

SELECT?*?INTO?excel?FROM?OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',?'Excel?5.0;DATABASE=c:/book1.xls'?)[Sheet1$]

?

04.?导入到Excel

?

INSERT?INTO?OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',?'Excel?5.0;DATABASE=c:/book1.xls'?)[Sheet1$]?SELECT?*?FROM?excel

?

?

?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/04/14/4070668.aspx

?

?

以上出自转载

?

今天百度搜了很多关于BCP的东西 自己尝试了一下

我的环境:

MSSQL2008 计算机名字 Owner-PC

实例名:poofly (注意这里)

数据库 test 数据表 tb

?

我首先进行了TB表的整个导出

一开始按照网上说的写。。

结果出现需要密码。纳闷了 我是windows身份验证 怎么要密码了。

后来找到了windows 身份的代码

exec master..xp_cmdshell 'bcp csdn_test..ta out c:/d.txt -c -S. -T'
(-T? 使用网络用户的安全凭据,通过信任连接连接到 SQL Server)

?

出现下面错误:

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQLState = 37000,NativeError = 4060
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]无法打开登录 'csdn_test' 中请求的数据库。登录失败。
NULL

纳闷阿。。

?

之后到论坛去问了 知道问题了

我原来机器上装过了SQL2000现在还没删呢 所有有2个数据库 要这样解决

-S 计算机名/实例名
或者
-S IP/实例名
整合起来就是

exec master..xp_cmdshell 'bcp test.dbo.tb out c:/d.txt -c -S Owner-PC/POOFLY -T'?

?

NULL
开始复制...
NULL
已复制了 5 行。
数据包的大小(字节): 4096
时钟时间(毫秒): 共????? 1
NULL

(7 行受影响)

?

问题解决了 哈哈 这里问题关键就在于

?一台机器上只有一个实例名 所以我就找到了现在的2008实例名

如何找实例名呢

?

看你用SQL Server Management Studio是怎么登录SQL2008实例的,那个服务器名称一杠后面就是实例名.

OK。。。

接下来我们进行?? 对要导出的表进行过滤 就是说 我不导出整个表或者试图 只取一部分

exec master..xp_cmdshell 'bcp "select top 2 * from? test.dbo.tb"? queryout c:/d.txt -c -S Owner-PC/POOFLY -T'

这里区别就是由一句select 语句加queryout 其他都一样了

具体格式大家去看上面

?

就写到这吧。。第一次写 呵呵 希望能够帮助你O(∩_∩)O

?PS:如果出现

消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程 'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

?

那是因为你没开启'xp_cmdshell' 服务: 下面为开启方法 :运行下面代码即可

?

--MSsql2005如何启用xp_cmdshell
--默认情况下,sql server2005安装完后,xp_cmdshell是禁用的(可能是安全考虑),如果要使用它,可按以下步骤

-- 允许配置高级选项
EXEC sp_configure 'show advanced options',1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell',1
GO
--重新配置
RECONFIGURE
GO

--执行想要的xp_cmdshell语句
Exec xp_cmdshell 'query user'
GO

--用完后,要记得将xp_cmdshell禁用(出于安全考虑)-- 允许配置高级选项EXEC sp_configure 'show advanced options',1GO-- 重新配置RECONFIGUREGO-- 禁用xp_cmdshellEXEC sp_configure 'xp_cmdshell',0GO--重新配置RECONFIGUREGO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读