常见SQL Server导入导出数据的几个工具
摘自:http://www.cnblogs.com/chenxizhang/archive/2011/06/09/2076542.html
在我们的日常工作中,与数据库打交道的机会越来越多。这一篇文章我整理一下常见的SQL Server导入导出数据的几个工具
1. 数据导入导出向导
这是一个可视化的工具,我放在首位,是由于它可以极大灵活地满足导入导出功能,而且是所见即所得的,易于使用。
启动数据导入导出向导的方式有好多种,我自己习惯直接通过如下的命令启动(开始=》运行)
dtswizard(顾名思义,它是一个wizard——向导,而且是与dts——data transfomation service有关的)
从下图可以看出,这个工具支持多种不同类型的数据源(以及数据目标),它其实不仅仅限于SQL Server服务器。
![]()
![]()
【注意】如果是64位,这里的提供程序中找不到Excel和Access(我知道很多朋友都想导出这两种格式)
该向导还可以通过在SQL Server Management Studio(SSMS)中启动。如果数据源或者数据目标是SQL Server的话,这是更加方便一些的。
![]()
【注意】通过这样的方式启动的向导,却又可以看到Excel和Access(很神奇吧,
)
![]()
值得一提的是,这个导入导出向导还有一个好处,就是将我们经常需要导入导出的操作保存起来,如下图所示
![]()
这里有一个所谓的SSIS Package,是什么意思呢?SSIS指的是SQL Server Integration Service,它是微软SQL Server BI平台的一个重要组件,用来设计和管理ETL解决方案。
这个SSIS Package是一个扩展名为dtsx的特殊文件包,它可以通过一个所谓的Business Intelligence Developement Studio(BI Studio)打开查看,并且还可以进一步地编辑
![]()
![]()
【备注】SSIS的讨论已经超出了本篇文章的范围。如有兴趣,请搜索我其他的文章。
2.BCP
如果你要实现简单的数据导入导出,并且希望用脚本命令的方式,而不是图形界面来实现。那么可以考虑SQL Server提供的BCP实用工具。
![]()
![]()
上图演示了如何将一个表导出为Excel文件,但如果想要根据一个查询导出的话,则可以按照下面这样的语法
![]()
使用BCP也可以进行数据,只要将out改成In即可。
【注意】使用bcp导出数据最大一个问题就是没有标题行
![]()
3. Bulk Insert和OpenRowSet
如果想在T-SQL中直接导入Excel文件的数据,或者TXT文件的数据,则可以了解一下如下两个特殊的T-SQL语法
BulkInsert的语法大致如下
![]()
OpenRowSet的语法大致如下
![]()
【备注】关于这两个语句的详细用法,请参考SQL Server自带的联机丛书。
4.FORXML和OPENXML
如果想要导出导入XML格式的数据,则可以了解一下FORXML和OPENXML语法(它们是T-SQL语法,所以也可以很灵活地嵌入在我们的存储过程中)
USE Northwind
GO SELECT * FROM Orders
FOR XML RAW('OrderItem'),
ELEMENTS XSINIL,
ROOT('Orders')
上面的语法,可以将查询用XML格式返回,如下图所示
![]()
【备注】FOR XML是SELECT的一个子句,有关更多用法,请参考SQL Server自带的联机丛书
【备注】导出为XML格式的目的是为了更好地在不同应用程序之间共享。
反过来,如果我们得到了一段XML数据,想将其导入到SQL Server中某个表中。可以考虑用OPENXML的语法。它的作用就是将XML还原为行集数据,然后就可以插入到我们的目的表中去了。
DECLARE @x XML
DECLARE @docHandle int SET @x=N'<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OrderItem>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<EmployeeID>3</EmployeeID>
<OrderDate>1996-07-04T00:00:00</OrderDate>
<RequiredDate>1996-08-01T00:00:00</RequiredDate>
<ShippedDate>1996-07-16T00:00:00</ShippedDate>
<ShipVia>3</ShipVia>
<Freight>32.3800</Freight>
<ShipName>Vins et alcools Chevalier</ShipName>
<ShipAddress>59 rue de lAbbaye</ShipAddress>
<ShipCity>Reims</ShipCity>
<ShipRegion xsi:nil="true" />
<ShipPostalCode>51100</ShipPostalCode>
<ShipCountry>France</ShipCountry>
</OrderItem>
<OrderItem>
<OrderID>10249</OrderID>
<CustomerID>TOMSP</CustomerID>
<EmployeeID>6</EmployeeID>
<OrderDate>1996-07-05T00:00:00</OrderDate>
<RequiredDate>1996-08-16T00:00:00</RequiredDate>
<ShippedDate>1996-07-10T00:00:00</ShippedDate>
<ShipVia>1</ShipVia>
<Freight>11.6100</Freight>
<ShipName>Toms Spezialitäten</ShipName>
<ShipAddress>Luisenstr. 48</ShipAddress>
<ShipCity>Münster</ShipCity>
<ShipRegion xsi:nil="true" />
<ShipPostalCode>44087</ShipPostalCode>
<ShipCountry>Germany</ShipCountry>
</OrderItem></Orders>' --第一步,做准备
EXEC SP_XML_PREPAREDOCUMENT @docHandle OUTPUT,@x
--第二步,openxml
INSERT Orders SELECT * FROM OPENXML(@docHandle,N'/Orders/OrderItem',2) WITH Orders
--第三步,销毁
EXEC sp_xml_removedocument @docHandle
【备注】OPENXML还有其他更加复杂的用法,请参考SQL Server自带的联机丛书
5.使用Excel导出数据,或者建立查询
最后介绍一种更加简单的方法,如果经常需要在Excel中进行数据库查询,并且据此做一些进一步的分析。最好的方法是在Excel中直接去导出数据,或者建立查询
![]()
![]()
![]()
![]()
![]()
![]()
这个做法的好处,是可以在现有Excel中,任何位置放置你需要的数据,而且需要注意的是,这些数据是链接到数据库的,也就是说,如果数据库的数据发生了更新,则只要刷新一下就可以了。
常见SQL Server导入导出数据的几个工具的更多相关文章
- SQL Server导入导出不丢主键和视图的方法
SQL Server导入导出 SQL Server 导入导出 工具/原料 使用Microsoft SQL Server Management Studio 导入导出数据. 直接使用Microsoft ...
- SQL Server 2008 导出数据与导入数据任务介绍
一. 实例数据库介绍 源数据库Test_Other_DB:存在tb_Class,tb_Student,tb_TestTable三张表. 目标数据库TestDB_Output:空库,不含任何表. 二. ...
- sql server 2005导出数据到oracle
一. 在sql server下处理需要导出的数据库 1. 执行以下sql,查出所有'float'类型的字段名,手动将float类型改为decimal(18,4). select 表名=d.name,字 ...
- (4.10)sql server导入导出
SQL Server快速导入数据分享 核心参考:官网~~https://docs.microsoft.com/zh-cn/sql/relational-databases/import-export/ ...
- SQL Server 2008导出数据为SQL脚本的操作步骤
以前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特 ...
- sql server导入excel数据
1.sql导入工具,数据源选择 microsoft excel 2.有odbc配置过的连接excel或其他数据库,都可以选择netframwork data provider for odbc,在ds ...
- SQL Server 导入大数据脚本
.先使用win+r运行cmd .执行osql -S DESKTOP-RGBEDS3 -U sa -P liyang -d FGCPOE_十院 -i D:\数据库\script.sql 即可!
- SQL SERVER ->> BCP导出数据到平面文件
--开启xp_cmdshell sp_configure ‘show advanced options’, ; GO RECONFIGURE; GO sp_configure ‘xp_cmdshell ...
- sql server 2005导出数据
*/ EXEC sp_configure 'show advanced options', 1 GO */ 配置选项 'show advanced options' 已从 0 更改为 1.请运 ...
随机推荐
- Ubuntu 16.04LTS 常用软件安装
一.遇到的问题 1.su认证失败 sudo passwd //输入命令,然后修改密码即可 2.移动启动器 gsettings set com.canonical.Unity.Launcher laun ...
- [BZOJ4007][JLOI2015]战争调度(DP+主定理)
第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了. 重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献. 设k为总结点数,对于 ...
- 【最短路】【位运算】It's not a Bug, it's a Feature!
[Uva658] It's not a Bug, it's a Feature! 题目略 UVA658 Problem PDF上有 试题分析: 本题可以看到:有<=20个潜在的BUG,那 ...
- 【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training
题意:给你一个序列,支持两种操作:单点修改:询问一个区间中所有相邻位置下标奇偶性均不同的子序列中,和最大的是多少. 线段树每个结点维护四个值: 以奇数下标开始到奇数下标结束的最大子序列和: 以偶数下标 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Introduction
最近学习了coursera上面Andrew NG的Machine learning课程,课程地址为:https://www.coursera.org/course/ml 在Introduction部分 ...
- HDU 5289 Assignment rmq
Assignment 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Description Tom owns a company and h ...
- 使用Javascript实现ajax示例
使用原始的javascript实现ajax <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"& ...
- emailautocomplete
CSS代码: .emailist{border:1px solid #bdbdbd; border-radius: 4px; background-color:#fff; color:#666; fo ...
- java性能监控器VisualVM
1.mac系统启动文件位置:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/jvisualvm 2.linux ...
- 七.使用fastJson解析器
1.到入jar包 <!-- 添加fastjson 依赖包. --> <dependency> <groupId>com.alibaba</groupId> ...