`
tanhong
  • 浏览: 379 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SQL SERVER几种数据迁移/导出导入的实践

 
阅读更多

SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入)。

(一)数据库与Excel

方法1:

使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可。而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文,默认创建字段名也是中文,这将给后面数据更新操作带来麻烦,所以最好还是以有意义的英文字段名。把数据导入后,再通过执行语句,把数据插入/更新到业务表。

 figure-1:任务——导出数据

 

方法2:

从SQLServer2005开始,可以直接在SSMS上查询出来的结果复制,然后粘贴到Excel上,对于少量数据来说,是非常快速方便的,需要注意的是长数字可能会变成科学记数法的形式,提前在Excel上指定列的格式为文本即可。

导入的话,ctrl + c 复制Excel上的数据,然后在选择相关表,编辑数据,把数据直接粘贴上去即可。但是不建议直接粘贴到业务表(如果表是空白没有数据,并且字段顺序对应,可以这样操作),而是建议先粘贴到一个新建的中间表中,然后再通过语句,把数据插入/更新到业务表。

这种方法的导出导入,适合于少量的数据,如5000行以内的记录,大于5000行以上就不建议了,速度较慢,如果数据过大,还一定成功。

 

 

(二)数据库与文本文件、数据库与数据库

数据库之间的数据迁移或导出导入其实是比较方便的,比如备份数据库后,在新的机器上做恢复。但是需要注意的是SQL2008之前的版本的备份无法在SQL2012或以上版本上直接恢复的,而是通过中间的SQL2008做一个过渡,把旧版本的数据库恢复到SQL2008,然后做备份,最后在SQL2012上恢复。

如果是新版本(下面以SQL2012为例)的备份文件恢复到旧版本(以SQL2008为例)上就比较麻烦了,一般是不支持新版本备份文件在旧版本中恢复的。只能通过编写脚本,把新版本的数据导入到旧版本中。

 

方法1:

首先推荐使用的是数据不落地的“链接服务器”。使用SQL2012的SSMS,同时连接到SQL2012和SQL2008的实例,通过编写脚本把SQL2012的数据导入到SQL2008中。两个实例的可以通过链接服务器来连接。以下是设置步骤。

figure-2:新建链接服务器

 

figure-3:链接服务器和数据源

 

figure-4:认证

 

figure-5:创建成功后,可以直接浏览链接服务器的目录,也可以使用语句查询了。

 

也可以使用脚本来创建链接服务器。

复制代码
--创建链接服务器
EXEC sp_addlinkedserver 
@server='LINKED_SERVER_TEST2',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.88.6,11433'--数据源
GO

--创建登录名和密码
EXEC sys.sp_addlinkedsrvlogin
@rmtsrvname = 'LINKED_SERVER_TEST2', -- 被访问的服务器别名
@useself = 'false',
@locallogin = NULL,
@rmtuser = 'sa', -- 数据源登录名
@rmtpassword = 'psd123456' -- 数据源登录密码
GO

--设置数据可以访问
EXEC sys.sp_serveroption
@server = 'LINKED_SERVER_TEST2', 
@optname = 'data access',
@optvalue = N'true'
GO
复制代码

code-1:创建链接服务器的脚本

 

创建成功后,可以直接查询数据。

figure-6:查询链接服务器的数据

 

通过视图sys.servers可以查询所有服务器及相关的属性。

figure-7:查询所有链接服务器

 

在SSMS上或运行以下脚本可以删除指定的链接服务器。

--删除链接服务器及所有登录
EXEC sys.sp_dropserver
 @server = 'LINKED_SERVER_TEST2',
 @droplogins = 'droplogins'
 GO

 code-2:删除链接服务器及所有登录

 

详细请参考:https://technet.microsoft.com/zh-cn/library/ff772782%28v=sql.105%29.aspx

 

 

方法2:

如果两个实例不能连接,只能在SQL2012上导出数据,再到SQL2008上导入。SQLServer提供生成包含数据的脚本工具,下图2。在第三步的“高级”选项里有一项“Types of data to scripts”有三个选择:Data only,Schema and data,Schema only,分别是只生成数据、生成表(对象)和数据,表(对象)。还有生成脚本的版本“Script for Server Version”,下图3。其他选项,按实际需要选择。

 

 figure-8:任务——生成脚本

 

figure-9:生成脚本的高级选项

 

也可以使用存储过程生成包含数据的脚本。这里介绍一个别人已经做写好存储过程:sp_generate_inserts。运行之后,会按表每条记录生成一条insert的语句

 View Code

code-3:sp_generate_inserts脚本源代码

 

在我的实际使用中,只有两三个参数比较常用,分别是@table_name、@from和@owner,如果表的架构使用默认的dbo,则可以省略。以下是一个使用的例子:

figure-10:使用sp_generate_inserts的一个例子

 

其他参数的用法,这里就不一一解释了。我经常使用这个存储过程做一些简单而少量(如数万行记录以内)的数据导出导入,比前面介绍的方法方便快捷许多。但这个存储过程支持处理一般常用的数据类型,像XML这种类型则不支持。还有,如果生成的数据太多太大,SSMS返回数据会很慢,甚至SSMS会挂了,这时还是使用SSMS自带的导出脚本到文件稳妥些。如果使用生成的数据脚本文件很大,几百MB甚至上GB,在导入时,就不能直接使用SSMS直接打开来执行了。可以使用SQLCMD实用工具来在执行脚本。如下面的一个例子,在D盘下有一个脚本1.sql,内容为:

USE AdventureWorks2008R2
GO
SELECT * FROM Person.CountryRegion;
GO

code-4:SQLMCD的测试脚本

 

在运行下输入CMD,输入:

sqlcmd -S localhost -d AdventureWorks2008R2 -i D:\1.sql

code-5:SQLMCD的命令

 

回车执行后如下图,SQLCMD的详细用法,请参考:https://msdn.microsoft.com/zh-cn/library/ms180944.aspx

 https://msdn.microsoft.com/zh-cn/library/ms162773%28v=sql.105%29.aspx

 

 figure-11:SQLCMD的测试例子

 

 

方法3:

使用BCP导出导入大容量数据。可以参阅我的另一篇博客《BCP导出导入大容量数据实践》。

 

以上几种方法是我在日常工作比较常使用的数据导出导入的工具,每一种方法都有各自的优势和不同的使用场景,使用不同的方法组合,可以节省不少时间,提高工作效率,希望对您的有所帮助。如果您有更好的建议或方法欢迎告诉我!

 

 
 

 

分享到:
评论

相关推荐

    在SQL Server数据库之间进行数据导入导出

    在SQL Server数据库之间进行数据导入导出是数据库管理中常见的操作,主要目的是为了数据备份、迁移、合并或者处理跨数据库的数据需求。以下详细介绍几种常用的方法。 1. **使用SELECT INTO导出数据** SELECT INTO...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    在IT行业中,处理大量...总的来说,正确地在Excel和SQL Server之间导入导出百万级数据需要理解两者的特点,选择合适的方法,并注意数据处理的最佳实践。在实际操作中,应根据具体需求和资源限制来选择最适合的方案。

    sql server 2005 导入和导出选择数据源

    在探讨SQL Server 2005导入和导出选择数据源这一主题时,我们首先要理解在数据管理和迁移过程中,选择合适的数据源对于确保数据的准确性和完整性至关重要。SQL Server 2005作为一款功能强大的数据库管理系统,提供了...

    Sqlserver2008R2数据迁移到sqlserver2008[归纳].pdf

    接着,使用“导入/导出任务”工具将数据从SQL Server 2008 R2导入到SQL Server 2008。导入完成后,再次执行脚本中的外键约束添加语句,如`ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外键名] FOREIGN KEY (字段) ...

    SQL SERVER自动导出Word数据库文档

    6. **PowerShell**:另一种方法是使用PowerShell,它提供了丰富的SQL Server模块,可以调用SQL命令行工具(如sqlcmd或bcp)来导出数据,然后通过PowerShell脚本控制Word文档的操作。 7. **Third-party Tools**:...

    数据的导入导出工具 能迁移dmp\dbf\sqlserver\access等数据

    3. **SQL Server数据迁移**:在SQL Server环境中,我们可以使用SQL Server Management Studio(SSMS)的“导入和导出数据”向导,或者利用Transact-SQL语句进行数据迁移。此外,SQL Server Integration Services ...

    Sql Server 2000 数据迁移至Oracle(含NClOB特殊字段)

    ### Sql Server 2000 数据迁移至Oracle(含NCLOB特殊字段) #### 数据迁移概述 数据迁移是指将数据从一个系统转移到另一个系统的流程。在本案例中,涉及的是从Sql Server 2000迁移至Oracle数据库的过程,并且特别...

    从sqlserver到mysql数据导出后导入脚本(实测,实用)

    这个场景下,我们有两份重要的脚本文件:`mysqlimp.bat`和`sqlserverexp.bat`,它们分别用于从SQL Server导出数据和将数据导入到MySQL。 首先,让我们了解SQL Server的数据导出过程。`sqlserverexp.bat`脚本很可能...

    SQL Server中数据的导入导出.pdf

    从提供的文件内容来看,我们可以抽取出以下几个与SQL Server数据导入导出相关的重要知识点。 首先,文件中提到了使用OPENROWSET和OPENDATASOURCE函数进行数据的导入。OPENROWSET是一个用于SQL Server查询的分布式...

    SqlServer数据导入MongoDB

    本篇文章将详细探讨如何将数据从SQL Server迁移到MongoDB,这一过程通常被称为数据导入或数据迁移。 首先,SQL Server是一款由微软开发的关系型数据库系统,以其强大的事务处理能力、数据完整性以及对ACID(原子性...

    SQL SERVER 数据导出工具

    SQL Server 数据导出工具是数据库管理员和开发人员在日常工作中常用的一种实用程序,它能够帮助用户将SQL Server数据库中的数据高效、便捷地导出到不同的格式或文件中。这种工具通常具备多种功能,如生成SQL脚本、...

    SQL Server数据库中成批导入数据的几个常用方法

    本文将介绍几种常用的SQL Server批量导入数据的方法。 首先,使用`SELECT INTO`语句是一种直接且简单的数据导入方法。此语句允许从一个数据库中的表复制数据到另一个数据库(前提都是SQL Server)的指定表中。但在...

    oracle和sqlserver数据迁移VB代码

    首先,Oracle到SQL Server的数据迁移涉及两个主要步骤:数据抽取和数据导入。VB代码可以利用Oracle的ODP.NET驱动和SQL Server的SQLClient库来实现这一过程。在Oracle端,你可以使用`OracleCommand`对象执行SQL查询来...

    软件数据库数据导入导出(sql)

    "软件数据库数据导入导出(sql)"这个主题涉及到如何高效、安全地管理数据库中的信息,以便进行备份、迁移、恢复或者整合不同的数据源。在本篇内容中,我们将深入探讨SQL在数据库数据导入导出中的应用。 首先,SQL...

    Sqlserver2005 本地导出数据到远程实例

    在SQL Server 2005中,将本地数据库的数据导出到远程实例是一项常见的操作,特别是在数据迁移、备份恢复或跨环境同步时。这个过程涉及多个步骤和技术,下面将详细介绍如何实现这一目标。 首先,我们需要了解SQL ...

    ACCESS 与SQL SERVER数据库数据相互转换,ACCESS,SQL SERVER

    当需要在ACCESS和SQL Server之间进行数据转换时,有以下几种常见方法: 1. **导出/导入**:在ACCESS中,可以通过“外部数据”菜单选择“导入或链接”,然后选择SQL Server作为数据源,进行数据的导入。反之,在SQL ...

    sql server导出语句

    在SQL Server中,导出插入语句是一种常见的数据管理和迁移操作。这通常涉及到获取数据库中的表结构信息,并生成对应的INSERT语句,以便在其他数据库环境中重新创建同样的数据。以下是对这个主题的详细解释: 首先,...

    SQL server 六种数据移动方法

    BCP(Bulk Copy Program)是一种快速高效的批量导入导出工具,主要适用于将大量数据从文件系统直接导入SQL Server数据库或反之。相比于其他数据移动方式,BCP具有速度快、占用资源少的特点。使用BCP进行数据移动时,...

    SQLServer数据库导入Oracle

    4. **数据导出**:从SQL Server导出数据,可以使用SQL Server Management Studio(SSMS)或其他第三方工具,生成脚本或者直接导出到文件(如CSV或Excel)。 5. **数据导入**:在Oracle中创建对应的表结构,然后导入...

    sql server 表数据导出工具

    SQL Server表数据导出工具是数据库管理员和开发人员在日常工作中经常会用到的一种实用程序,它能够方便地将SQL Server数据库中的数据导出为各种格式,例如CSV、XML、Excel或者文本文件,以便进行数据分析、备份、...

Global site tag (gtag.js) - Google Analytics