码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server BCP

时间:2021-02-23 14:21:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:环境变量   code   data   db_name   col   pre   asc   shel   导出数据   

在我们的日常开发过程中,我们会遇到需要将数据库中的是数据导出到本地的txt文件中,或者将本地TXT文件中的数据导入到数据库。

为了方便开发人员的工作,SQL Server为我们提供了BCP 工具帮助我们导入,导出数据。

如果想使用BCP,需要现在本地安装SQLCMD

X64:

https://go.microsoft.com/fwlink/?linkid=2142258

X86:

https://go.microsoft.com/fwlink/?linkid=2142257

你可以参考官方文档:

https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-ver15

BCP命令是控制台命令,但为了方便,我们也可以通过SSMS运行。如果你想在自己的SSMS 上执行BCP 命令,需要在你的SSMS 执行以下命令:

技术图片
--打开高级选项
EXEC SP_CONFIGURE show advanced options, 1;
RECONFIGURE;
--启用执行CMD命令
EXEC SP_CONFIGURE xp_cmdshell, 1;
RECONFIGURE;
View Code

导出数据:

下面是相同的代码分别在控制台执行和SSMS执行:

控制台:

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

SSMS:

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 还可以对表进行过滤,然后将过滤后的数据导出:

bcp "SELECT DisplayName,Identifier,CustomerValue FROM [Database].[dbo].[FindInterfaceVocabularyLookup] ()" queryout d:\Data\Test.txt -c -r\n -T -t"|"

SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\table2.txt -c -U"sa" -P"password"‘ 

导入:

同样BCP亦可将数据导入数据. 此时只需将 out 改为 in

BCP  MigrationSandbox.dbo.RXNCONSO in d:\Data\Test.txt-c -r\n -T -t"|" -r 0x0a.
 
注意点:
1.由于BCP 是控制台程序,所以需要注意一些特殊字符的处理,就像示例中字段分隔符 | 需要引号引起来。参考https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-ver15 备注里面的内容

 字符 <、>、|、&、^ 是特殊的命令 shell 字符,在字符串中使用这些字符时,必须在它们前面加上转义符 (^) 或用引号将其引起来(例如“StringContaining&Symbol”)。 如果使用引号将包含某个特殊字符的字符串引起来,则引号将设置为环境变量值的一部分。

2.在导入数据时,行分隔符建议使用十六进制ASCLL码表示,如例子BCP  MigrationSandbox.dbo.RXNCONSO in d:\Data\Test.txt-c -r\n -T -t"|" -r 0x0a. 就是使用0x0a表示\n.如果你的程序提示字符太长的错误,可以考虑此解决方案

 本文意在提供简单示例,帮助快速写出代码,如需更多详情,请参照官方文档:

https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-ver15

SQL Server BCP

标签:环境变量   code   data   db_name   col   pre   asc   shel   导出数据   

原文地址:https://www.cnblogs.com/xinyublog/p/14433405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!