使用BCP將SQL Server表数据导出为txt或xls等格式文件

 

命令为 exec master..xp_cmdshell 'bcp "selct语句" queryout c:\test.xls -w -S 数据库服务器名 -U "用户名" -P "密码"'

注意,-S -U -P要大写
例如:
exec master..xp_cmdshell 'bcp "select top 10 * from rw_dbs_cz..rmstpar" queryout c:\rmstpar.xls -w -S magickerr -U "sa" -P "strong"'

BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。

下面将详细讨论如何利用BCP导入导出数据。

1. 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值插入,而不是这列的默认值。

2. 如何使用BCP导出数据

(1) 使用BCP导出整个表或视图。

BCP AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password" --使用密码连接

或

BCP AdventureWorks.sales.currency out c:\currency1.txt -c -T --使用信任连接

下面是上述命令执行后的输出结果

Starting copy...
105 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)

下面是currency1.txt的部分内容

AED Emirati Dirham 1998-06-01 00:00:00.000
AFA Afghani 1998-06-01 00:00:00.000
... ... ...
... ... ...
ZWD Zimbabwe Dollar 1998-06-01 00:00:00.000

在使用密码登录时需要将-U后的用户名和-P后的密码加上双引号。

注:BCP除了可以在控制台执行外,还可以通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行BCP。如上述第一条命令可改写为

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password"'

执行xp_cmdshell后,返回信息以表的形式输出。为了可以方便地在SQL中执行BCP,下面的命令都使用xp_cmdshell执行BCP命令。

(2) 对要导出的表进行过滤。

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

EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -c -U"sa" -P"password"'

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

EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -F 10 -L 13 -c -U"sa" -P"password"'

这条命令使用了两个参数-F 10和-L 13,表示从SELECT TOP 20 * FROM AdventureWorks.sales.currency所查出来的结果中取第10条到13条记录进行导出。

3. 如何使用BCP导出格式文件

BCP不仅可以根据表、视图导入导出数据,还可以配合格式文件对导入导出数据进行限制。格式文件以纯文本文件形式存在,分为一般格式和xml格式。用户可以手工编写格式文件,也可以通过BCP命令根据表、视图自动生成格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'

上述命令将currency表的结构生成了一个格式文件currency_format1.fmt,下面是这个格式文件的内容。

9.0
3
1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate


这个格式文件记录了这个表的字段(共3个字段)类型、长度、字符和行分割符和字段名等信息。

BCP还可以通过-x选项生成xml格式的格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'

xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。

4. 如何使用BCP导入数据

BCP可以通过in命令将上面所导出的currency1.txt和currency2.txt再重新导入到数据库中,由于currency有主键,因此我们将复制一个和currency的结构完全一样的表。

SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency

将数据导入到currency1表中

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -T'

导入数据也同样可以使用-F和-L选项来选择导入数据的记录行。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -c -F 10 -L 13 -T'

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

使用普通的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -f c:\currency_format1.fmt -T'

使用xml格式的格式文件

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -x -f c:\currency_format2.fmt -T'

总结

BCP命令是SQL Server提供的一个快捷的数据导入导出工具。使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据。当然,它也可以通过xp_cmdshell在SQL语句中执行,通过这种方式可以将其放到客户端程序中(如delphi、c#等)运行,这也是使客户端程序具有数据导入导出功能的方法之一。
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-704101/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-704101/

sql server bcp 备份数据 【代码】sql server bcp 备份数据。 阅读详情

相关推荐

Windows提权之Mssql(sql server)数据库提权(xp_cmdshell提权)

利用大马或者webshell管理工具登录mssql数据库,执行以下sql命令检查xp_cmdshell是否存在。也可以利用SQL注入。如果xplog70.dll也删除了可以自己上传一个或者执行以下命令恢复。结果为1,则证明存在。当结果为0时,可以通过下列命令恢复。使用xp_cmdshel执行命令。

mrx56的博客 1732

sql server的BCP导入导出

bcp命令是SQL Server提供的一个快捷的数据导入导出工具。使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据。bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。bcp可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出...

weixin_34128501的博客 859

魔兽RPG老地图逆向工程:解密三国列传3.0武将招募限制(附JASS实战)

本文详细解析了《三国列传3.0》魔兽RPG地图的武将招募限制机制,通过逆向工程和JASS脚本修改技术,突破SLK加密防线并解密游戏逻辑。文章提供了从工具准备到代码修改的完整实战指南,帮助玩家解除武将数量限制,重温经典游戏的乐趣。

i1j2k的博客 369

sql-server【bcp工具】

bcp(Bulk Copy Program)是 SQL Server 提供的一个命令行工具,用于在 SQL Server 实例与用户指定格式的数据文件之间批量复制表或视图数据。bcp工具非常适合进行大量数据的导入导出操作,因为它可以绕过 SQL Server 的解析器和查询优化器,直接将数据写入或读取到物理文件中,从而提高数据传输效率。如果bcp工具已经安装并且在PATH环境变量中设置了正确的路径,它会显示bcp可执行文件的完整路径。

weixin_47363690的博客 4018

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6612

一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务

一般情况下,SQL数据库中带有导入与导出数据的直接按键操作,点击数据表所在的数据库--任务--导出/导入数据,根据导入/导出向导直接将数据导出即可。 但导出的数据格式多为Excel格式,如果需要导出的数据为csv/word/txt格式时,我们如何用SQL语言操作?如果需定时导出更新的数据表,又该如何操作呢? 第一步:使用 sp_configure开启系统存储过程sys...

weixin_33895657的博客 1518

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 615

用T-SQL语句实现SQL server与XLS,MDB等文件的数据交换

  简介:微软SQL Server数据库SQL语句导入导出大全,包括与其他数据库和文件的数据的导入导出。(注意,其中的PSW和USER ID均指被访问文件的权限,不是网络登陆用户名和密码)/*******  导出到excel EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S"GNETDATA/G

我的积累 1384

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 154

鸿宇多用户商城user.php RCE漏洞复现

鸿宇多用户商城 user.php 存在任意命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 1622

T-SQL语句实现SQL server与XLS,MDB等文件的数据交换

 用T-SQL语句实现SQL server与XLS,MDB等文件的数据交换   简介:微软SQL Server数据库SQL语句导入导出大全,包括与其他数据库和文件的数据的导入导出。(注意,其中的PSW和USER ID均指被访问文件的权限,不是网络登陆用户名和密码)/*******  导出到excel EXEC master..xp_cmdshell ’bcp SettleDB.

之语的技术资料专栏 652

基于 YOLOv26 的高速抛物识别系统:微小目标检测

本文提出了一种基于YOLOv26的高速抛物识别系统,专注于微小目标检测。系统采用多模块协同架构,包括视频预处理、YOLOv26检测、目标跟踪和抛物行为分析等模块。关键技术包括YOLOv26s模型检测、DeepSORT目标跟踪和边缘计算部署。通过构建包含多种抛物类型的专业数据集,并应用数据增强技术提升模型性能。系统实现了车辆检测、微小抛物目标识别、抛物轨迹分析和风险等级评估等功能,可实时检测高速公路上的抛物行为并触发告警,为交通管理提供智能化解决方案。

一键难忘的博客 633

SQL SERVER 2005 与 VFP,EXCEL,TXT文本文档之间的导入导出

--以下是TRANSACT-SQL 语句--假设有test数据库 中有名t1 的表use test--装好VFP ODBC驱动--openrowset返回的就是看作一个表exec sp_dropserver --删除链接服务器exec sp_helpserver --显示现有的链接服务器select * from sys.servers  --查询服务器表exec sp_dropserve

Lain的专栏 2861

Skill的嵌套

Skill的嵌套就很简单,直接引用其他的Skill就好了。在一个 Skill 的 SKILL.md 中,可以明确指示 Claude 去读取另一个 Skill 的文档。

Criss@陈磊 961

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

动态导出数据到文本/xls/sql/doc文件

select IDENTITY(int, 1,1) AS [id],insert into tt(filetype,Brand,ProdNo,ProdType ,filetitle,C0001,Tmoney,HttpUrl,parentid) values( ++G++, ++isnull(a.EC0102,)++, ++isnull

t134679的专栏 969

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

sql如何向一个表中批量插入大量数据

--如果两表结构一样。 insertintotb1 select*fromtb2 --也可以尝试从excel或access或TXT等文件导入。参考如下: 导入导出大全 导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDA...

weixin_30912051的博客 473

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

019. Asp.net将SqlServer中的数据保存到xls/txt中

using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.U...

weixin_30258027的博客 75

SQL语句大全

SQL语句大全 ...

weixin_30546189的博客 97

SQLServer 导入导出工具BCP详解

bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。如上述的格式文件中的第三个字段的字符长度是24,如果某个文本文件中的相应字段的长度超过24,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。

Rebirth 重生 4184

sqlserver 数据迁移之bcp

BCP(Bulk Copy Program)是 SQL Server 中用于大量数据导入和导出的工具。在进行数据迁移时,我们可以使用 BCP 来提高数据迁移的效率和性能。

墨水直达的博客 2313

SQL server 数据导入导出BCP工具使用详解

数据的导入导出是数据库管理员常见的工作任务之一,尤其是平面文件的导入导出。BCP 工具则为这些任务提供了强有力的支持,它是基于DB-Library,尤其是在生产环境中,从本地传送数据到服务器或从服务器传送数据到本地,因它无需提供图形界面,减少网络带宽,提高了传输速率。BCP的全称是BULK COPY PROGRAM,它是一个命令行程序,可以完全脱离SQL server进程来实现。...

anjichan4261的博客 561

master..xp_cmdshell

xp_cmdshell     以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行   xp_cmdshell   的权限。             说明     在   Microsoft®   Windows®   95   或   Microsoft   Windows   98   操作系统中执行  

dainiao01的专栏 3348

过程需要类型为 'varchar' 的参数 'command_string'。

过程需要类型为 'varchar' 的参数 'command_string'。 原因是  xp_cmdshell的参数应该是nvarchar类型的,而不是varchar declare @cmd nvarchar(4000) set @cmd='select 1' exec master..xp_cmdshell @cmd  ...

danfeixia的专栏 2125

BCP导出导入大容量数据实践

前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件。各有优缺点,以适用不同的需求。下面介绍大容量数据导出导入的利器——BCP实用工具。同时在后面也介绍BULK INSERT导入大容量数据,以及BCP结合BULK INSERT做数据接口的实践(在SQL2008R2上实践)。 1. B...

weixin_30251829的博客 400

mssql数据库提权中xp_cmdshell使用

mssql数据库提权中xp_cmdshell使用 获得sa密码后蚁剑连接数据库,可用xp_cmdshell执行系统命令 xp, extend procedure, 表示本存储过程是扩展的存储过程 cmdshell, command shell, 直接敲命令行执行 判断是否存在xp_cmdshell select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell' 返回1证明存在xp_cmdshell xp_c

Sindy666的博客 2241
上一篇: job中执行带有参数的procedure 时的写法
下一篇: SQL Server 中ntext, text, image长度计算 - datalength 函数
cuixie2370
博客等级 码龄10年 17粉丝 842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值