SQL Server数据库中的导入导出
沉沙 2018-05-09 来源 : 阅读 707 评论 0

摘要:本文介绍了SQL Server数据库中的导入导出的方法,希望读过本文对您学习SQL Server数据库有所帮助。

1. 如何使用bcp导出数据

(1) 使用bcp导出整个表或视图。(两种实现方式)

EXEC master..xp_cmdshell  'bcp "CACDB_S1000.dbo.tOperator"  out "d:\currency1.txt"  -c  -U"sa" -P"xxxxxx"'--使用密码连接
EXEC master..xp_cmdshell  'bcp CACDB_S1000.dbo.tOperator  out d:\currency1.txt  -c  -U"sa" -P"xxxxxx"'--使用密码连接

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

EXEC master..xp_cmdshell 'bcp "CACDB_S1000.dbo.tOperator" out "d:\currency2.txt"   -c  -T' --使用信任连接
EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator out d:\currency3.txt   -c  -T' --使用信任连接

(2) 对要导出的表进行过滤
--bcp不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数。通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。(通过查询sql过滤)
EXEC master..xp_cmdshell 'bcp "SELECT TOP 5 * FROM CACDB_S1000.dbo.tOperator" queryout c:\currency4.txt  -c  -U"sa" -P"xxxxxx"'
--bcp还可以通过简单地设置选项对导出的行进行限制 (通过设置第一行,最后一行参数过滤)
EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM CACDB_S1000.dbo.tOperator" queryout d:\currency5.txt  -F 10  -L 13  -c  -U"sa" -P"xxxxxx"'
--这条命令使用了两个参数-F 10和-L 13,表示从SELECT TOP 20 * FROM CACDB_S1000.dbo.tOperator所查出来的结果中取第10条到13条记录进行导出。


2. 如何使用bcp导出格式文件
(1)

EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator format nul -f d:\currency_format1.fmt  -c -T'

上述命令将currency表的结构生成了一个格式文件currency_format1.fmt
这个格式文件记录了这个表的字段(共3个字段)类型、长度、字符和行分割符和字段名等信息。

(2) bcp导出xml格式的文件

EXEC master..xp_cmdshell 'bcp "select * from CACDB_S1000.dbo.tPlanManager for xml auto, elements " queryout d:\a1.xml -c  -Usa -Pxxxxxx'

3. 如何使用bcp导入数据
复制相同的表结构

SELECT TOP 0 * INTO CACDB_S1000.dbo.tOperator1 FROM CACDB_S1000.dbo.tOperator

将数据导入到表中

EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator1 in d:\currency1.txt   -c  -T'

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

EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator1 in d:\currency1.txt   -c -F 10  -L 13 -T'

使用普通的格式文件

EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator1 in d:\currency1.txt   -F 10  -L 13 -c  -f d:\currency_format1.fmt -T'


使用xml格式的格式文件

EXEC master..xp_cmdshell 'bcp CACDB_S1000.dbo.tOperator1 in d:\currency1.txt   -F 10  -L 13 -c  -x -f d:\currency_format2.fmt -T'

使用Transact-SQL进行数据导入导出

(1).使用SELECT INTO导出数据
注: 在使用SELECT INTO语句时,INTO后跟的表必须在数据库不存在,否则出错.

复制表结构同时将旧表中的数据导入新表中

SELECT * INTO tOperator2 FROM tOperator

把数据复制到另外的数据库中

SELECT * INTO CACDB_Log.dbo.tOperator2 FROM tOperator

(2).使用INSERT INTO 和 UPDATE插入和更新数据

INSERT INTO table1 SELECT * FROM table2

INSERT INTO db2.dbo.table1 SELECT * FROM table2

UPDATE table1 SET table1.f1=table2.f1, table1.f2=table2.f2 FROM table2
WHERE table1.f1=table2.f1

4. 使用OPENDATASOURCE和OPENROWSET实现在SQL Server数据库和SQL Server数据库之间的数据导入导出

(1).SQL Server数据库和SQL Server数据库之间的数据导入导出。

导入数据

SELECT  * INTO tOperator3
    FROM  OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=127.0.0.1;User ID=sa;Password=xxxxxx'
         ).CACDB_S1000.dbo.tOperator

导出数据

 INSERT INTO OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=127.0.0.1;User ID=sa;Password=xxxxxx'
         ).CACDB_Log.dbo.tOperator2 select * from CACDB_S1000.dbo.tOperator

在这条语句中OPENDATASOURCE(...)可以理解为SQL Server的一个服务,.CACDB_S1000.dbo.tOperator是这个服务管理的一个数据库的一个表tOperator 。使用INSERT INTO时OPENDATASOURCE(...)后跟的表必须存在,并且如果表中的字段为自增字段,则必须先改成非自增字段在插入,否则插入失败。
导出数据(用OPENROWSET函数实现)

INSERT INTO OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'xxxxxx', 'select * from CACDB_Log.dbo.tOperator2')
  SELECT * FROM CACDB_S1000.dbo.tOperator 
 

SELECT * INTO CACDB_Log.dbo.tOperator2 FROM
   OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=d:\')...[data#txt]

INSERT INTO OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=d:\')...[data#txt] SELECT * FROM CACDB_Log.dbo.tOperator2

存储过程-----导出数据到文件

   CREATE     PROCEDURE  jackeytest11

AS
declare @bcpString varchar(1000)
set @bcpString='BCP "select * from CACDB_S1000.dbo.tYHJBXX" queryout "d:\jackeytest.txt" -c -S "localhost" -U "sa" -P "xxxxxx"'
EXEC master..xp_cmdshell @bcpString
GO

 

以上内容由职坐标整理发布,更多实用的SQL Server数据库技术,请关注职坐标SQL Server频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程