方法一、sql server单表导入、导出(通过CSV文件)
导出:
直接打开查询分析器查询要导出表的信息(select * from 表),得到的结果全选,右键另存为 xxx.csv文件 (得到该表的所有信息,CSV文件格式)
导入:
首先通过sql server 的企业管理器生成要导出表的 SQL脚本,步骤:要导出表——所有任务(右键)——生成SQL脚本
得到该表的结构,然后在目的数据库新建该表。
最后一步:在查询分析器里执行:
没有触发器的操作
bulk insert 表 from 'c:\xxx.csv' with(fieldterminator=',')
有触发器的操作
当我们要的数据量非常大时,有时候就需要启动触发器。下面的脚本使用了FIRE_TRIGGERS选项来指明在目标表上的任何触发器都应当启动:
bulk insert 表 from 'c:\xxx.csv' with fieldterminator=',',FIRE_TRIGGERS)
方法二、使用OPENDATASOURCE和OPENROWSET在不同类型的数据库之间导入导出数据
在使用OPENDATASOURCE时需要开启'Ad Hoc Distributed Queries'
启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 使用完成后,关闭Ad Hoc Distributed Queries: exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_configure 'show advanced options',0 reconfigure
1. 在SQL Server数据库之间进行数据导入导出
(1).使用SELECT INTO导出数据
在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同时具备两个功能:根据SELECT后跟的字段以及INTO后面跟的表名建立空表(如果SELECT后是*, 空表的结构和FROM所指的表的结构相同);将SELECT查出的数据插入到这个空表中。在使用SELECT INTO语句时,INTO后跟的表必须在数据库不存在,否则出错,下面是一个使用SELECT INTO的例子。
假设有一个表table1,字段为f1(int)、f2(varchar(50))。
SELECT * INTO table2 FROM table1
这条SQL语的在建立table2表后,将table1的数据全部插入到table1中的,还可以将*改为f1或f2以便向适当的字段中插入数据。
SELECT INTO不仅可以在同一个数据中建立表,也可以在不同的SQL Server数据库中建立表。
USE db1 SELECT * INTO db2.dbo.table2 FROM table1
以上语句在数据库db2中建立了一个所有者是dbo的表table2,在向db2建表时当前登录的用户必须有在db2建表的权限才能建立table2。 使用SELECT INTO要注意的一点是SELECT INTO不可以和COMPUTE一起使用,因为COMPUTE返回的是一组记录集,这将会引起二意性(即不知道根据哪个表建立空表)。
(2).使用INSERT INTO 和 UPDATE插入和更新数据
SELECT INTO只能将数据复制到一个空表中,而INSERT INTO可以将一个表或视图中的数据插入到另外一个表中。
INSERT INTO table1 SELECT * FROM table2 或 INSERT INTO db2.dbo.table1 SELECT * FROM table2
但以上的INSERT INTO语句可能会产生一个主键冲突错误(如果table1中的某个字段是主键,恰巧table2中的这个字段有的值和table1的这个字段的值相同)。因此,上面的语句可以修改为
INSERT INTO table1 -- 假设字段f1为主键
SELECT * FROM table2 WHERE NOT EXISTS(SELECT table1.f1 FROM table1 WHERE table1.f1=table2.f1 )
以上语句的功能是将table2中f1在table1中不存在的记录插入到table1中。
要想更新table1可以使用UPDATE语句
UPDATE table1 SET table1.f1=table2.f1, table1.f2=table2.f2 FROM table2 WHERE table1.f1=table2.f1
将以上两条INSERT INTO和UPDATE语句组合起来在一起运行,就可以实现记录在table1中不存在时插入,存在时更新的功能,但要注意要将UPDATE放在 INSERT INTO前面,否则UPDATE更新的记录数将是table1和table2记录数的总和。
2. 使用OPENDATASOURCE和OPENROWSET在不同类型的数据库之间导入导出数据
在异构的数据库之间进行数据传输,可以使用SQL Server提供的两个系统函数OPENDATASOURCE和OPENROWSET。
OPENDATASOURCE可以打开任何支持OLE DB的数据库,并且可以将OPENDATASOURCE做为SELECT、UPDATE、INSERT和DELETE后所跟的表名。如
SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=192.168.18.252;User ID=sa;Password=test').pubs.dbo.authors
这条语句的功能是查询192.168.18.252这台机器中SQL Server数据库pubs中的authors表。从这条语句可以看出,OPENDATASOURCE有两个参数,第一个参数是 provider_name,表示用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。第二个参数是连接字符串,根据OLE DB Provider不同而不同(如果不清楚自己所使用的OLE DB Provider的连接字符串,可以使用delphi、visual studio等开发工具中的ADO控件自动生成相应的连接字符串)。
OPENROWSET函数和OPENDATASOURCE函数类似,只是它可以在打开数据库的同时对数据库中的表进行查询,如以下语句
OPENROWSET('MSDASQL.1', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=c:\db; SourceType=DBF', 'SELECT * FROM [b.dbf]')
最后一个参数查询foxpro表b.dbf,读者可以通过where条件对b.dbf进行过滤。如果将INSERT INTO、SELECT INTO和OPENDATASOURCE或OPENROWSET一起使用,就可以使SQL Server数据库和其它类型的数据库之间进行数据导入导出。下面介绍如何使用这两个函数在SQL Server数据库和其它类型的数据库之间进行数据导入导出。
(1).SQL Server数据库和SQL Server数据库之间的数据导入导出。
导入数据
SELECT * INTO authors1 FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=192.168.18.252;User ID=sa;Password=abc' ).pubs.dbo.authors
导出数据
INSERT INTO OPENDATASOURCE( 'SQLOLEDB', 'Data Source=192.168.18.252;User ID=sa;Password=abc' ).test.dbo.authors select * from pubs.dbo.authors
在这条语句中OPENDATASOURCE(...)可以理解为SQL Server的一个服务,.pubs.dbo.authors是这个服务管理的一个数据库的一个表authors。使用INSERT INTO时OPENDATASOURCE(...)后跟的表必须存在。
也可以将以上的OPENDATASOURCE换成OPENROWSET
INSERT INTO OPENROWSET('SQLOLEDB','192.168.18.252';'sa';'abc', 'select * from test.dbo.kk') SELECT * FROM pubs.dbo.authors
使用OPENROWSET要注意一点,'192.168.18.252';'sa';'abc'中间是";",而不是","。OPENDATASOURCE和OPENROWSET都不接受参数变量。
(2). SQL Server数据库和Access数据库之间的数据导入导出。
导入数据
SELECT * INTO access FROM OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0', 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:"data.mdb;Persist Security Info=False')table1
或者使用OPENROWSET
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\data.mdb';'admin';'','SELECT * FROM table1')
导出数据
INSERT INTO OPENDATASOURCE( 'Microsoft.Jet.OLEDB.4.0', 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data.mdb;Persist Security Info=False')table1 SELECT * FROM access
打开access数据库的OLE DB Provider叫Microsoft.Jet.OLEDB.4.0,需要注意的是操作非SQL Server数据库在OPENDATASOURCE(...)后面引用数据库中的表时使用"...”,而不是“.”。
(3). SQL Server数据库和文本文件之间的数据导入导出。
导入数据 SELECT * INTO text1 FROM OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:\')[data#txt] 导出数据 INSERT INTO OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:\')[data#txt] SELECT * FROM text1 或者使用OPENROWSET INSERT INTO OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:\', [data#txt]) SELECT * FROM text1 如果要插入部分字段,可使用 INSERT INTO OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=c:\', 'SELECT aa FROM [data#txt]') SELECT aa FROM text1
这条SQL语句的功能是将c盘根目录的data.txt文件导入到text1表中,在这里文件名中的“.”要使用“#”代替。在向文本导出时,不仅文本文件要存在,而且第一行必须和要导出表的字段一至。
(4). SQL Server数据库和dbase数据库之间的数据导入导出。
导入数据 SELECT * INTO dbase FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' , 'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','SELECT * FROM [b.dbf]') 导出数据 INSERT INTO OPENROWSET('MICROSOFT.JET.OLEDB.4.0' , 'dBase III;HDR=NO;IMEX=2;DATABASE=C:\', 'SELECT * FROM [b.dbf]') SELECT * FROM dbase
OPENROWSET(...)中的b.dbf使用[...]括起来,是为了当dbf文件名有空格等字符时不会出错,如果没有这些特殊字符,可以将[...]去掉
(5). SQL Server数据库和foxpro数据库之间的数据导入导出。
导入数据 SELECT * INTO foxpro FROM OPENROWSET('MSDASQL.1', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=c:\; SourceType=DBF', 'SELECT * FROM [a.dbf]') 导出数据 INSERT INTO OPENROWSET('MSDASQL.1' , 'Driver=Microsoft Visual FoxPro Driver; SourceDB=c:\db; SourceType=DBF','SELECT * FROM a.dbf') SELECT * FROM foxpro
在此处a.dbf不能使用[...]括起来,否则出错(这是由driver决定的)。
(6). SQL Server数据库和excel文件之间的数据导入导出
导入数据
SELECT * INTO excel FROM OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;DATABASE=c:\book1.xls' )...[Sheet1$]
导出数据
INSERT INTO OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;DATABASE=c:\book1.xls' )...[Sheet1$] SELECT * FROM excel
在book1.xls的Sheet1中必须有和excel表相对应的字段,否则会出错。
以上讨论了几种常用的数据库和SQL Server数据库之间如何使用Transact-SQL进行数据导入导出。在SQL Server中还提供了将其它类型的数据库注册到SQL Server中的功能,这样就可以和使用SQL Server数据库表一样使用这些被注册数据库中的表了。
EXEC sp_addlinkedserver
'access',
'OLE DB Provider for Jet',
'Microsoft.Jet.OLEDB.4.0',
'c:\data.mdb'
以上SQL使用存储过程sp_addlinkedserver注册了一个access数据库,我们可以在SQL Server中使用如下语句查询在data.mdb中的table1。
SELECT * FROM access...table1
这样就可很方便地查询access数据库中的表了,如果要导入table1,可以使用SELECT * INTO table2 FROM access...table1。如果想删除注册的数据库连接,使用如下语句。
EXEC sp_dropserver 'access'
使用Transact-SQL不仅可以向SQL Server数据库导入导出数据,而且还可以使任意两种类型数据库之间互相导入导出数据。以access和excel为例进行说明。
INSERT INTO OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',
'Excel 5.0;DATABASE=c:\book1.xls' )...[Sheet1$] SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'c:"data.mdb';'admin';'','SELECT * FROM table1')
以上SQL语句将access数据库的table1表的数据插入到excel文件book1.xls中的Sheet1表单中。
使用Transact-SQL进行数据的导入导出,可以很方便地将这些Transact-SQL语句放到客户端程序中(如delphi、c#等),从而可以很容易地编写自已的数据库导入导出工具。
以上部分信息来源:http://www.cnblogs.com/nokiaguy/archive/2008/05/21/1203801.html
分享到:
相关推荐
sqlserver 数据表导入导出文本文件 qq:292258449 sqlserver 数据表导入导出文本文件
SQL Server 数据库导入导出的方法 SQL Server 数据库导入导出是数据库管理员和开发者常用的操作,目的是将数据库备份到本地或网络存储设备中,以便在需要时恢复数据库或将数据库迁移到其他服务器上。下面将详细介绍...
SQLSERVER对单个表的查询结果导出导入 在本文中,我们将探讨如何将SQLSERVER单个表的部分查询结果导出至EXCEL,并由EXCEL导入至数据库表中。这包括同一服务器中的数据库表之间的通过SQL语句进行导出导入,及不同...
本文主要介绍如何在SQL Server中导出和导入存储过程。 首先,导出存储过程的步骤如下: 1. 打开SQL Server Management Studio(简称SSMS),这是一个用于管理SQL Server数据库的强大工具。 2. 在对象资源管理器中...
标题 "sqlserver 2005 数据库导入导出图解" 涉及到的是SQL Server 2005数据库管理系统中数据的导入和导出操作,这是数据库管理中的重要环节,通常用于数据迁移、备份或数据分析。下面将详细阐述这一主题。 一、SQL ...
首先,SQL Server 2005的数据导入导出功能主要通过“数据库导入和导出向导”来实现,这是一个内置工具,可以帮助用户将数据从多种数据源迁移到SQL Server,或者将SQL Server中的数据导出到其他格式。这个过程通常...
SQL Server SQL 语句导入导出大全 简介:微软 SQL Server 数据库 SQL 语句导入导出大全,包括与其他数据库和文件的数据的导入导出。下面是 SQL Server SQL 语句导入导出大全的详细知识点。 导出到 Excel 为了将...
SQL Server 三种导入导出数据方式比较 在本文中,我们将详细比较 SQL Server 中的三种导入导出数据方式:使用 Transact-SQL 对数据进行处理;调用命令行工具 bcp 处理数据;使用数据转换服务(DTS)对数据进行处理...
另一方面,从SQL Server导入到Excel则常用于数据分析和报告编制。通过编写SQL查询获取所需数据,然后利用C#的Microsoft.Office.Interop.Excel库,可以直接将查询结果写入Excel工作表。在这个过程中,你需要创建Excel...
SQL Server 2005的导入导出功能强大而灵活,支持多种数据源类型,包括SQL Server自身、.NET Framework、OLE DB以及其他办公软件如Excel和Access。正确选择和配置数据源对于确保数据迁移的效率和质量至关重要。在实际...
SQL_SERVER数据导入导出工具是数据库管理中必不可少的辅助软件,尤其对于SQL Server数据库的开发者和管理员来说,它极大地提高了工作效率。此工具主要用于方便、快捷地将数据从SQL Server数据库导出,同时也能进行...
总结,Delphi实现Excel和SQL Server数据的导入导出涉及的主要步骤包括:建立数据库连接、选择合适的数据处理库或组件、编写数据读取和写入的代码、转换数据格式以及执行导入导出操作。这个过程需要对Delphi编程、...
在SQL Server数据库管理系统中,数据导入导出是日常管理和维护工作的重要组成部分,它涉及到数据迁移、备份恢复、数据同步等多个方面。本工具集专注于提供这些辅助功能,旨在提高数据库管理员的工作效率。以下将详细...
### SQL Server 2005 数据库导入导出方法详解 在使用SQL Server 2005的过程中,很多用户会遇到需要对数据库进行备份、还原、导入或导出的情况。尽管SQL Server Management Studio(SSMS)提供了这些功能,但在实际...
SQL Server数据库导入导出技术是数据库管理员和开发人员在整合数据、迁移数据库或进行数据备份时常用的一种功能。SQL Server提供了多种方式进行数据导入和导出,以满足不同场景的需求。下面我们将详细介绍这些方法...
针对这个需求,存在一种名为“SQLServer数据库表中数据导出成SQL语句工具”的实用程序,它能够帮助我们高效地完成这项任务。这个工具通常以MHT(Multi-Part/Related)格式提供,这是一种单一文件Web页面存储格式,...
在SQL Server数据库管理中,数据的导入导出是日常维护工作的重要组成部分,它涉及到数据迁移、备份、恢复以及数据交换等多个场景。本篇将详细探讨SQL Server中的数据导入导出方法,以帮助你更好地理解和应用这些实用...
bcp是微软SQLServer数据库系统的命令行工具,用于进行大数据量的导入导出,该工具简单实用、效率极高,本文总结了bcp命令操作的各种设置开关功能含义和使用方法,可以为需要的用户提供有益帮助。
### SQL Server 数据与 Excel 表的导入导出详解 #### 一、概述 在数据库管理领域,数据导入导出是一项非常重要的技能。无论是为了合并数据、归档还是数据分析,甚至是开发应用程序或升级数据库,数据迁移都是必不...
本文旨在介绍 SQL Server 的导出导入方法,涵盖了数据库和表的导出导入,涵盖了两种常见的场景:局域网内的导出导入和经过防火墙的导出导入。 数据库导出导入 在 SQL Server 企业管理器中,选中要转移的数据库,按...