SQL SERVER 与ACCESS、EXCEL的数据转换

熟悉 SQL SERVER 2000 的数据库管理员都知道,其 DTS 可以进行数据的导入导出,其实,我们也可以使用 Transact-SQL 语句进行导入导出操作。在 Transact-SQL 语句中,我们主要使用 OpenDataSource 函数、 OPENROWSET 函数,关于函数的详细说明,请参考 SQL 联机帮助。利用下述方法,可以十分容易地实现 SQL SERVER ACCESS EXCEL 数据转换,详细说明如下:



一、 SQL SERVER ACCESS 的数据导入导出

常规的数据导入导出:

使用 DTS 向导迁移你的 Access 数据到 SQL Server ,你可以使用这些步骤 :

   1 SQL SERVER 企业管理器中的 Tools (工具)菜单上,选择 Data Transformation

   2Services (数据转换服务),然后选择 czdImport Data (导入数据)。

   3 Choose a Data Source (选择数据源)对话框中选择 Microsoft Access as the Source ,然后键入你的 .mdb 数据库 (.mdb 文件扩展名 ) 的文件名或通过浏览寻找该文件。

   4 Choose a Destination (选择目标)对话框中,选择 Microsoft OLE   DB Prov ider for SQL   Server ,选择数据库服务器,然后单击必要的验证方式。

   5 Specify Table Copy (指定表格复制)或 Query (查询)对话框中,单击 Copy tables (复制表格)。

6
Select Source Tables (选择源表格)对话框中,单击 Select All (全部选定)。下一步,完成。



Transact-SQL
语句进行导入导出:

1.
SQL SERVER 里查询 access 数据 :


SELECT *

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\DB.mdb";User ID=Admin;Password=')...
表名


2.
access 导入 SQL server

-- ======================================================

SQL SERVER 里运行 :

SELECT *

INTO newtable

FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...
表名


3.
SQL SERVER 表里的数据插入到 Access 表中

-- ======================================================

SQL SERVER 里运行:

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...
表名

(
列名 1, 列名 2)

select
列名 1, 列名 2 from sql



实例:

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:\db.mdb';'admin';'', Test)

select id,name from Test

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '',
表名 )

SELECT *

FROM sqltablename


二、 SQL SERVER EXCEL 的数据导入导出

1
、在 SQL SERVER 里查询 Excel 数据 :

SELECT *

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]



下面是个查询的示例,它通过用于 Jet OLE DB 提供程序查询 Excel 电子表格。

SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


2
、将 Excel 的数据导入 SQL server :
SELECT * into newtable

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]



实例 :

SELECT * into newtable

FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


3
、将 SQL SERVER 中查询到的数据导成一个 Excel 文件

T-SQL
代码:

EXEC master..xp_cmdshell 'bcp
库名 .dbo. 表名 out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'

参数: S SQL 服务器名; U 是用户; P 是密码

说明:还可以导出文本文件等多种格式

实例 :EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'

EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'



VB6 中应用 ADO 导出 EXCEL 文件代码:

Dim cn As New ADODB.Connection

cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"

cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM
库名 .dbo. 表名 " queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"

4
、在 SQL SERVER 里往 Excel 插入数据 :

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',

'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)



T-SQL
代码:

INSERT INTO

OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',

'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]

(bestand, produkt) VALUES (20, 'Test')

-------------------------------------------------------------------------------------------------

总结:利用以上语句,我们可以方便地将 SQL SERVER ACCESS EXCEL 电子表格软件中的数据进行转换,为我们提供了极大方便!
配置 SQL Server 2000 选项
SQL Server 服务器的配置选项属于那种人们了解较少且经常误用的选项。当一个技术支持人员要求你按照某种方式调整一个选项、而另一个技术支持人员却要求你按照另一种完全对立的方式调整同一个选项时,你可能对这些选项的真正含义感到困惑。有关这些选项的资料很缺乏,至少可以说不够详细和清楚。在 SQL Server 2000 中, Microsoft 减少了几个配置选项,让 SQL Server 动态配置它们,从而减少了几个容易混淆的地方。同时, Microsoft 又为 SQL Server 2000 新增了两个服务器配置选项,调整了一些数据库选项,从而稍许简化了数据库管理员的工作。

新增的服务器选项
就象访问大多数企业版服务器的属性一样,我们不能在 SQL Server Enterprise Manager 中通过服务器属性窗口访问 SQL Server 2000 新增的两个服务器选项。作为防止用户由于不小心而错误配置服务器的一个安全措施, Microsoft 没有把这些高级配置选项放入 Enterprise Manager 。相反,我们必须使用 T-SQL/sp_configure 系统存储过程去访问这些高级选项。我们可以用不带参数运行 sp_configure 的方法查看服务器的当前配置。在执行结果中, config_value SQL Server Master 数据库 syscurconfigs 表提取出来的数据,它显示了服务器的当前配置; run_value 列显示了执行 sp_configure SQL Server 正在使用的选项, SQL Server sysconfigures 表中存储这些数据。修改某个选项之后,我们必须执行 RECONFIGURE 命令(在大多数情况下,还要重新启动 SQL Server )才能让新的 run_value 显示出来。本文所讨论的所有选项都要求重新启动 SQL Server

服务器选项总共有 36 个,默认情况下, sp_configure 存储过程只显示其中的 10 个,显示结果中不包含高级选项,而且所有新的 SQL Server 配置选项都不会出现在这个精简的清单中。然而,我们可以使用 show advanced options 命令参数让 SQL Server 显示出所有选项。要启用 show advanced options ,我们使用如下命令格式:

EXEC sp_configure 'show advanced options', '1' RECONFIGURE

要安装一个选项,我们必须在使用 sp_configure 配置服务器之后运行 RECONFIGURE 命令。上面命令的输出结果如下:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE command to install.

一旦能够查看高级选项,我们就可以看到两个新的服务器选项。其中最重要的一个新选项是 awe enabled 选项,它能够让 SQL Server 企业版提高服务器的内存访问能力。默认情况下, SQL Server 能够使用的最大 RAM 3GB 。在 Windows 2000 上,应用程序可以 使用 Address Windowing Extensions AWE API 访问更多的 RAM 。例如,在 Windows 2000 Advanced Server 中,我们能够使用多达 8GB 的内存,只有 Windows 2000 Datacenter Server 支持 64GB 内存才超过它。显然,当 SQL Server 拥有更多的可用内存,它将能够缓冲更多的数据,改善查询的响应时间。

不过,启用 awe enabled 选项也有副作用。启用 awe enabled 选项之后, SQL Server 不再动态地分配内存。由于缺乏内存动态分配功能,管理负担随之增加,因为我们必须仔细地监视 RAM 使用情况。另外,设置 awe enabled 选项之后,我们还必须设置 max server memory 选项。如果我们不设置 max server memory 选项,服务器 RAM 又等于最低要求 3GB SQL Server 将在启动的时候占据机器上几乎所有的 RAM ,只给 Windows 和其他应用留下 128 MB RAM 。通过设置 max server memory 选项,我们可以限制 SQL Server 使用的内存总量。

awe enabled
选项只能在 SQL Server 2000 Enterprise Edition 上使用,操作系统必须是 Windows 2000 Advance Server Datacenter 。如果你在 SQL Server 的其他版本上使用这个选项(或者操作系统是 WinNT ), SQL Server 将忽略这个选项。在某些服务器配置组合下,不适当地配置这个选项将导致不可预知的结果。例如,如果我们在 Windows 98 操作系统、运行 SQL Server Personal Edition 的机器上设置这个选项, SQL Server 可能报告它已经停止(甚至是在它正在运行的时候),而且它将拒绝停止 SQL Server 实例。

SQL Server Enterprise Edition 服务器上启用 AWE 包括三个步骤。首先,我们必须确保启动 SQL Server 实例的帐号具有在内存中锁定页的权限。 SQL Server 安装时自动把页锁定权限授予我们指定用来启动 SQL Server 服务的 Windows 帐号;但是,如果后来这个帐号已经改变,你应该检查一下已经把哪些权限授予了启动 SQL Server 的用户。检查帐号的权限可以使用 Windows 2000 的组策略工具。第二个步骤是运行 sp_configure 存储过程,把 awe enabled 选项设置为 1 。然后,我们必须执行 RECONFIGURE ,用手工方式重新启动 SQL Server 。配置命令的语法为:

EXEC sp_configure 'awe enabled', '1' RECONFIGURE

注意,在 Windows 2000 或者 NT 上,如果要访问高于 4GB 的物理内存,我们还必须采取其他一些措施,即修改 boot.ini 文件,加入 /pae 选项。

第二个新的 SQL Server 2000 选项用来启用 C2 级安全审核模式。 C2 是一个政府安全等级,它保证系统能够保护资源并具有足够的审核能力。 C2 模式允许我们监视对所有数据库实体的所有访问企图。启用 SQL Server C2 审核功能的命令如下:

EXEC sp_configure 'c2 audit mode', '1' RECONFIGURE

(要实现完整的 C2 级安全保证, Windows 操作系统也必须提供相应的支持)启用 C2 审核模式并重新启动之后, SQL Server 自动在 \MSSQL\Data 目录下面创建跟踪文件。我们可以使用 SQL Server Profiler 查看这些监视服务器活动的跟踪文件。

SQL Server
128KB 大小的块为单位把数据写入跟踪文件。因此,当 SQL Server 非正常停止时,我们最多可能丢失 128 KB 的日志数据。可以想象,包含审核信息的日志文件将以很快的速度增大。例如,某次试验只访问了三个表,跟踪文件已经超过了 1MB 。当跟踪文件超过 200MB 时, C2 审核将关闭旧文件并创建新文件。每次 SQL Server 启动的时候,它会创建一个新的跟踪文件。如果磁盘空间不足, SQL Server 将停止运行,直至我们为审核日志释放出足够的磁盘空间并重新启动 SQL Server 实例。在 SQL Server 启动的时候,我们可以使用 -f 参数禁用审核。

减少的服务器选项
SQL Server 2000 中, Microsoft 减少了原有的几个选项,让 SQL Server 2000 自动配置这些选项。减少的选项中最引人注目的是 max async IO 选项。这个选项允许数据库管理员指定在单一的数据库文件上可以出现多少异步的磁盘读取和写入操作。 SQL Server 7.0 中的 max async IO 选项是人们了解最少的选项之一,它的默认值是 32 ,但很少有管理员去调整这个值。在 SQL Server 2000 中,这个异步 IO 选项随着 SQL Server 接收的适配器反馈信息动态地上升或者下降, SQL Server 利用反馈算法确定服务器负载以及 SQL Server 系统能够控制的数量。

数据库选项
SQL Server 2000 中,如果你曾经查看过 Enterprise Manager 中数据库的 Options 选项卡,你可能会对一些通用选项的消失感到困惑(要访问 Options 选项卡,在 Enterprise Manager 中右击数据库然后选择 Properties )。 Options 选项卡中减少了 trunc. log on chkpt. 以及 Select Into/Bulk Copy 这两个选项,如图 1 所示。为了清楚和向后兼容起见,这些通用选项现在称为 recovery model (恢复模型)选项。如果用 SQL Server 2000 Enterprise Manager 连接 SQL Server 7.0 数据库,我们仍旧可以看到这些老选项。以前,我们使用下面的命令为 Northwind 数据库开启 trunc. log on chkpt. 选项:

SP_DBOPTION Northwind ,'trunc. log on chkpt.', true

设置好选项之后,我们可以通过 Options 选项卡或者下面的查询检查 Northwind 数据库上这些选项设置是否成功:

SELECT DATABASEPROPERTY ('Northwind', 'IsTruncLog')

结果为 1 表示选项设置成了 true ;结果为 0 表示选项设置成了 false 。如果结果为 NULL ,它表示我们或者选择了一个错误的选项,或者数据库不存在。

为了便于使用, Microsoft trunc. log on chkpt. Select Into/Bulk Copy 选项换成了恢复模型设置。这种选项改变的目的在于确保数据库管理员能够充分理解在灾难恢复策略中恢复模型选项的意义。 SQL Server 2000 为我们提供了三种数据库恢复模型: simple (简单恢复), full (完全恢复), bulk_logged (大容量日志记录恢复)。

简单恢复模型最容易操作,但它是最缺乏灵活性的灾难恢复策略。选择简单恢复模型等同于把 trunc. log on chkpt. 设置成 true 。在这种恢复模型下,我们只能进行完全备份和差异备份( differential backup ):这是因为事务日志总是被截断,事务日志备份不可用。一般地,对于一个包含关键性数据的系统,我们不应该选择简单恢复模型,因为它不能够帮助我们把系统还原到故障点。使用这种恢复模型时,我们最多只能把系统恢复到最后一次成功进行完全备份和差异备份的状态。进行恢复时,我们首先要恢复最后一次成功进行的完全备份,然后在此基础上恢复差异备份(差异备份只能把自从数据库最后一次完全备份之后对数据库的改动施加到数据库上)。

完全恢复模型把 trunc. log on chkpt. 选项和 Select Into/Bulk Copy 选项都设置成 false 。完全恢复具有把数据库恢复到故障点或特定即时点的能力。对于保护那些包含关键性数据的环境来说,这种模型很理想,但它提高了设备和管理的代价,因为如果数据库访问比较频繁的话,系统将很快产生庞大的事务日志记录。由于在这种模型中 Select Into/Bulk Copy 设置成了 false SQL Server 将记录包括大容量数据装入在内的所有事件。

最后一种恢复模型是大容量日志记录恢复,它把 trunc. log on chkpt. 设置成 false ,把 Select Into/Bulk Copy 设置成 true 。在大容量日志记录恢复模型中,大容量复制操作的数据丢失程度要比完全恢复模型严重。完全恢复模型记录大容量复制操作的完整日志,但在大容量日志记录恢复模型下, SQL Server 只记录这些操作的最小日志,而且无法逐个控制这些操作。在大容量日志记录恢复模型中,数据文件损坏可能导致要求手工重做工作。 下表比较了三种恢复模型的特点。

恢复模型 优点 工作损失表现 能否恢复到即时点?
简单 允许高性能大容量复制操作。
收回日志空间,使得空间要求最小。 必须重做自最新的数据库或差异备份后所发生的更改。 可以恢复到任何备份的结尾处。随后必须重做更改。
完全 数据文件丢失或损坏不会导致工作损失。
可以恢复到任意即时点(例如,应用程序或用户错误之前)。 正常情况下没有。
如果日志损坏,则必须重做自最新的日志备份后所发生的更改。 可以恢复到任何即时点。
大容量日志记录 允许高性能大容量复制操作。
大容量操作使用最少的日志空间。 如果日志损坏,或者自最新的日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改。 否则不丢失任何工作。 可以恢复到任何备份的结尾处。随后必须重做更改。

在数据库的 Options 选项卡中,我们可以从 Model 下拉列表框选择 Simple 把恢复模型改成简单模型。另外, Microsoft 扩展了 ALTER DATABASE 命令,我们可以用它设置数据库属性。例如,用下面这个 T-SQL 命令可以把恢复模型设置为完全恢复模型:

ALTER DATABASE Northwind SET RECOVERY FULL

SQL Server 2000
提供了把数据库转入单用户模式的许多选项,它们都属于那种最令人感兴趣的隐藏选项。为了修正讹误或其他数据问题,数据库管理员常常要把数据库转入单用户模式。当数据库处于这种模式时,其它用户将不能再访问数据,从而使得管理员能够在用户访问损坏的数据之前修正数据问题。在 SQL Server 7.0 中,在把数据库转入单用户模式之前,我们必须确保所有用户都已经断开连接。对于一个高速 OLTP 数据库系统,比如电子商务系统,断开所有用户的连接非常困难,因为就在我们断开某个用户的连接时,其他用户还会连接数据库。 SQL Server 2000 极大地改进了这个操作过程,我们可以给用户一个指定的时间去完成他们的事务,然后由 SQL Server 自动断开他们的连接。另外,我们也可以在不提供任何延迟时间的情况下断开所有的连接。

把数据库转入单用户模式的方法之一是在数据库的 Options 选项卡选中 Restrict Access 检查框,然后选择 Single user 。另外, Microsoft 扩展了 ALTER DATABASE 命令,使它能够把数据库转入单用户模式,语法如下:

ALTER DATABASE Northwind SET SINGLE_USER

执行这个命令之后, SQL Server 等待所有的数据库连接,让它们完成各自的事务。在这种状态下,所有请求连接数据库的用户都将接收到图 2 显示的错误信息,并被重定向到他们各自的默认数据库(通常是 Master 数据库)。图 2 的错误信息意味着数据库处于冻结状态,直至所有用户断开连接。如果目标服务器或者发出命令的用户没有设置 query timeout 参数,客户端可能无限期地等待查询完成,直至所有的连接被断开。在 Query Analyzer 中,我们可以在 Options 屏幕(选择菜单 Tools Options )的 Connections 选项卡里面指定超时秒数。在单用户模式下,只有发出 ALTER DATABASE 命令的用户可以保持连接。
另外,我们还可以用 ROLLBACK IMMEDIATE 命令断开所有打开数据库连接的用户。但我们不能在 Enterprise Manager 中使用这个命令,而是应该用 Query Analyzer 执行,例如:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE

执行这个命令之后, SQL Server 立即断开所有的连接并回退它们的事务。所有正在执行事务的用户都会接收到一个连接错误,而且他们不能再连接数据库。

我们可以指定一个时间选项,让 SQL Server 在断开用户的连接之前等待用户完成他们的事务。这个选项是可选的,它用 ROLLBACK AFTER 关键词指定,如下面的命令所示:

ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK AFTER 20 SECONDS

执行这个命令之后, SQL Server 先等待 20 秒钟,然后断开所有的连接并回退它们的事务。在这个过程中, SQL Server 不再接受新的连接请求,它是一个数据库级的服务器暂停。在这个 20 秒之内,所有企图连接数据库的新用户都将接收到图 2 显示的错误信息。如果执行这个命令的时候不存在已经连接的用户,数据库将立即转入单用户模式。

Enterprise Manager
的数据库 Options 选项卡中,最后一个新的配置选项是 Compatibility Level ,如图 1 所示。要设置这个选项,我们只需从 Compatibility Level 下拉框选择一个合适的兼容级别。在这个下拉框中, SQL Server 2000 80 代表, 7.0 70 代表, 6.5 65 代表。兼容级别选项决定了某些数据库查询操作的执行方法。由于 SQL Server 的关系引擎在发展变化,某些查询的结果在不同的版本之间可能不同。例如,如果我们执行下面这个查询:

SELECT DATALENGTH('')

依赖于我们为数据库设置的兼容级别是 SQL Server 2000 7.0 或者 6.5 ,上述查询可能得到两个不同的结果。对于 SQL Server 2000 7.0 数据库,返回结果是 0 ,因为 SQL Server 2000 7.0 把空字符串视为真正的空;在 SQL Server 6.5 兼容模式下,返回结果是 1 ,因为 SQL Server 6.5 把空字符串视为一个空格。 SQL Server 7.0 也有这个兼容级别选项,但它只能通过 sp_dbcmptlevel 存储过程访问。

综上所述,在 SQL Server 2000 中, Microsoft 对服务器和数据库配置方法进行了几个实质性的改动。不要轻视所有本文讨论的选项和其他 SQL Server 配置选项――即使是一个小小的改动,它也可能对性能产生重大的正面或负面影响。在调整 SQL Server 的配置选项时,你最好使用 Performance Monitor 之类的服务器监视工具,确保选项调整不会对服务器性能产生负面影响。

 

你可能感兴趣的:(数据库,职场,休闲)