使用BCP导入导出数据
本人第一次写原创文章 。。(一开始部分是转载 我不想累赘说很多网上有的 下面是我自己写的我遇到的问题) ? BCP是SQL?Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据 ? BCP除了可以在控制台执行外,还可以通过调用SQL?Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行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表示格式文件名。这个选项依赖于上述的动作,如果使用的是IN或OUT,Format_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' ? 出现下面错误: output 纳闷阿。。 ? 之后到论坛去问了 知道问题了 我原来机器上装过了SQL2000现在还没删呢 所有有2个数据库 要这样解决 -S 计算机名/实例名 exec master..xp_cmdshell 'bcp test.dbo.tb out c:/d.txt -c -S Owner-PC/POOFLY -T'? ? 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 行 ? 那是因为你没开启'xp_cmdshell' 服务: 下面为开启方法 :运行下面代码即可 ? --MSsql2005如何启用xp_cmdshell -- 允许配置高级选项 --执行想要的xp_cmdshell语句 --用完后,要记得将xp_cmdshell禁用(出于安全考虑)-- 允许配置高级选项EXEC sp_configure 'show advanced options',1GO-- 重新配置RECONFIGUREGO-- 禁用xp_cmdshellEXEC sp_configure 'xp_cmdshell',0GO--重新配置RECONFIGUREGO (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |