[返回]
中国计算机报1999年第75期
李奇威
本文介绍了如何使用Microsoft SQL Server
7.0和Visual Studio 6.0数据库工具分析来自不同数据库系统的数据。在查询设计中可以通过链接服务器属性访问外界OLE
DB数据资源;使用Top语句来限制要返回的数据;通过文件组来提高数据库的执行和有效性;用Guid数据类型来生成惟一标识符。
如果有一个跨国公司,它包括五个大的辅助部门和北美的总部,其辅助部门负责研究不同的产品,要你分析此公司的前50个收入来源。但是这六个部门(包括总部)使用了六种不同的数据库管理系统。例如,东京的部门将数据保存在一个Microsoft
Visual Foxpro数据库里;伦敦的用Oracle数据库;布宜诺斯艾利斯将数据存储在Sybase系统中;总部和Johannesburg用Microsoft
SQL Server数据库;堪培拉用第三方OLE DB系统。你怎样才能在总部把这些信息收集到一个报告里呢?
这似乎是一件很辛苦的工作。但是用新的Microsoft SQL server 7.0和Visual
Studio 6.0数据库工具,在查询设计中用链接服务器和Top属性,你就可以很轻松地完成此项任务。
当然不止这几步,但关键是用Visual Studio 6.0数据库工具,你可以享用一些SQL
Server 7.0的优点使你的企业数据工作更简单有效。
准备工作
如果你有以下这两种工具之一,你就可以应用本文介绍的方法:
● Microsoft SQL server 7.0和Visual studio 6.0数据库工具;
● 具有最新的客户工具的Microsoft SQL Server 7.0和Visual Studio 6.0数据库工具。
如果SQL Server 7.0被安装在一台服务器上,并且你的客户机上装有Visual
Studio 6.0数据库工具,请在客户机上运行SQL Server 7.0安装程序选择客户工具安装。如果你的机器上既安装了Visual
Studio 6.0数据库工具又安装了SQL Server 7.0,那么安装向导将会自动更新你的数据库工具。
访问外部OLE DB数据资源
要访问异种OLE DB数据资源处理企业数据工作,那么链接服务器特性就是个灵活有力的解决方法。
链接服务器是用SQL Server 7.0对外部数据对象和需要访问的那些数据信息的一种定义方法。这种定义包括四部分名称:外部数据对象服务器名称;包含对象的目录或数据库;对象或所有者的模式;对象名称(表或数据库的浏览)。这四部分的名称用的结构格式为:链接的服务器名称、目录、模式、对象名称。
定义了链接服务器后,就能够以Transact-SQL语句用这四部分名称在链接服务器上查阅数据对象了。我们可以用Select、Insert、Update和Delete
transact-SQL语句直接查阅外部数据源的表和浏览。
这样,一个简单的Select语句就能用于刚才的跨国公司情况。可以这样访问数据:
SELECT *FROM johann_sa.svs.dbo.products
其中:johann_sa是位于Johannesburg辅助部门的服务器的名称、svs是数据库名称、dbo是对象所有者、products是表的名称。
当客户请求执行一个分布式查询时,SQL Server对这个命令进行解析,并以基本的行集合表格发送请求,每行包含OLE
DB数据列的行的集合。因为OLE DB提供者以行来组织它们的数据,因此它们知道当收到来SQL
Server自行集合请求时该做什么工作。在数据库工具里可以SQL Pane方式来运用链接服务器特性。
以跨国公司为例,为了访问来自辅助部门的服务数据库的产品表里的净收入信息,
Select语句可以这样写:
SELECT Prod.name, Prod.net
FROM johann_sa.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
ORDER BY Prod.net desc
结果集合将列出由Johannesburg辅助部门在1998年6月30日财政年度的所有产品交易中价值高于1000000美元的净收入。产品将按照净收入从高到低的降序排列。
限制结果集合
继续以上述情况为例。因为Johannesburg辅助部门覆盖非洲和中东,应当如何限定得到的数据列表呢?
这也简单:利用TOP语句就可以实现。TOP语句用于限定你可能得到一个大的结果集合的列数的工具。用TOP关键字可以指定只想得到的结果集合中的前n个记录。用PERCENT关键字和TOP组合也可以得到想要的结果集合中的前百分之n条记录。这样你在SELECT语句中使用TOP就有两种方式:
SELECT TOP n *
SELECT TOP n PERCENT *
接着,回到Johannesburg的查询,用TOP语句限制你的列表只有50行。查询语句如下:
SELECT TOP 50 Prod.name, Prod.net
FROM johann_sa.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
在有限的结果集合中排列行
如果在用了TOP语句的SELECT表达式中指定ORDER BY,那么SQL Server首先按照指定排序建立整个查询结果,然后从建立的集合中取出前n行或前百分之n的结果。
这样Johannesburg查询表达式:
SELECT TOP 50 Prod.name, Prod.net
FROM johann_sa.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98
AND Prod.net > 1
ORDER BY Prod.net desc
SQL Server首先得到净收入大于1000000美元的所有产品,然后将它们按从大到小的顺序排列。当列表被排列之后,前50个被取出并返回到结果集合中。
使数据库操作更有效
当查询大型数据库时,执行性能很重要。SQL Server 7.0在数据库工具中有两个新特性可以用来提高数据库操作。文件组可以加速数据库操作,GUID数据类型用于全局惟一数据库对象(在像跨国公司这样的企业项目中很有用)。
改进对数据库的访问
文件组是一个数据库文件存储管理机制,它允许在多个磁盘上创建数据库。
当创建一个SQL Server 7.0数据库时,程序自动指定所有文件到缺省文件组,除非你指定另外文件组为缺省文件组。但是,即使指定了一个不同的文件组为缺省的,所有数据库系统文件也必须保留在主文件组中。
指向数据库文件的文件组属性记录这些文件,即使它们位于不同的磁盘。
例如,把一个表指向一个文件组,但把表的索引文件存在另一个磁盘上。当访问数据表时,查询将涉及两个磁盘。因此,关于表的不同文件的几个查询将会同时发生,这样将加速查询结果集合的返回。
用数据库工具,可以在Tables Property Page(属性页)中指定Table(表)和Text(文本)文件组,在Indexes/Keys
Property Page (索引/键值属性页)中指定索引文件组。
当开始计划数据库文件组属性时,务必记住:
● 文件组不能独立于数据库文件而创建;
● 一个文件组不能用于多于一个数据库上;
● 任何时候只有一个文件组能成为一个数据库缺省文件组;
● 一个文件只能成为一个文件组的成员;
● 一旦某个文件被加到数据库并指向一个文件组,你就不能把这个文件移向另一个文件组;
● 系统对象和文件永远指向主文件组。
确保数据对象的惟一性
当处理被多地点使用的大型数据库时,就像跨国公司的情景。也许会遇上确保表对象惟一性的问题。在此情况下,Uniqueidentifier也许正是解决方法。Uniqueidentifier是一个GUID数据类型,它存储了全局惟一标识符。一个GUID是一个为确保惟一的二进制数,因此其它的计算机不能生成同样的数值。
GUID的惟一值是由计算机网卡的识别数字加一个来自CPU时钟的惟一数值生成。
Uniqueidentifier的值并不像Identit属性那样自动生成。为了给表对象生成一个Uniqueidentifier值,必须指定Newid功能为列的缺省值。
例如,如果想生成一个表,它列出所有跨国公司辅助部门的最前面的产品的净收入。如果要指定一个GUID数据类型,可以这样表示:
CREATE TABLE NetRevenueTable
(UniqueColumn Uniqueidentifier DEFAULT NEWID(),
Characters VARCHAR(10))
在数据库工具中,可以在数据库图表或设计一个表时这样做。
如果用到Uniqueidentifier,请记住下面数据类型的特征:
● 值是长的,模糊的;
● 值是随机的,并且下一个模式对用户是没意义的;
● 值在依靠连续增加的申请中是很难利用的;
● 值为16位,因此用这些值来建立的索引会很慢。
总而言之,使用的数据库工具的新SQL Server7.0特性将使企业数据库任务(像跨国公司)更有效、更可行。
用链接服务器和TOP语句,我们就能够访问外部OLE DB数据资源,并且限制实际很长的结果列表,得到想要和能简单使用的结果。另外,如果能正确地在数据库文件上执行文件组和GUID数据类型,操作就能更有效、更容易地完成。