📄
字号:
作者:浅斟低唱
日期:2000-1-24 17:00:26
NINIA INGRAM·微软公司
摘要:阐明如何使用Microsoft Sql server 7.0和Visual studio 6.0
数据库工具分析来自不同数据库系统的数据。在查询设计中通过链接服务
器和Top属性,可以:
☆ 通过链接服务器属性访问外界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安装中升级数据库工具
☆ 如果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年六月30日财政年度
的所有产品交易中价值高于1000,000美元的净收入。产品将按照净收入从
高到低的降序排列。
限制结果集合
让我们继续以这种情况为例。因为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语句,跳到属性窗口的查询标签上。如果你想要
一定行数,在 TOP文本框中键入一个整数,那么正确的查询就会生成。如
果你想要前百分之n行,你应该键入n,并在TOP文本框中键入"percent"字。
例如,在Johannesburg查询中,你所要做的是在Properties(属性)
窗口查询选项卡的Top文本框中键入50。
在有限的结果集合中排列行
如果你在用了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首先得到净收入大于1000,000美元的所有产品,然后将它们按
从大到小的顺序排列。当列表被排列之后,前50个被取出并返回到结果集
合中。
使数据库操作更有效
当查询大型数据库时,执行性能很重要。SQL Server 7.0在数据库工
具中有两个新特性可以用来提高数据库操作。文件组可以加速数据库操作,
GUID数据类型用于全局唯一数据库对象(在像跨国公司这样的企业项目中
很有用)。
改进对数据库的访问
文件组是一个数据库文件存储管理机制,它允许你在多个磁盘上创建
数据库。
当创建一个SQL Server 7.0数据库时,自动指定所有文件到缺省文件
组。除非你指定另外文件组为缺省文件组,缺省文件组为主文件组。(你
也可以为将来文件在以后改变数据库里的缺省文件。)但是,即使你指定
了一个不同的文件组为缺省的,你的所有数据库系统文件必须保留在主文
件组中。
指向数据库文件的文件组属性记录这些文件即使他们位于不同的磁盘。
例如,你把一个表指向一个文件组,但把表的索引文件存在另一个磁
盘上。当你访问数据表时,你的查询将涉及两个磁盘,因此,关于表的不
同文件的几个查询将会同时发生,这样,这样将加速查询结果集合的返回。
文件组也能有助于数据库的管理工作。你同时不必对你的数据库执行
备分操作。相反,你可以对你的数据库每次备分一个文件组。
用数据库工具,你可以在Tables Property Page(属性页)中指定
Table(表)和Text(文本)文件组。在Indexes/Keys Property Page (索引/
键值属性页)中指定索引文件组。
当你开始计划你的数据库文件组属性时,务必记住:
☆ 文件组不能独立于数据库文件而创建。
☆ 一个文件组不能用于多于一个数据库上。
☆ 任何时候只有一个文件组能成为一个数据库缺省文件组。
☆ 一个文件只能成为一个文件组的成员.
☆ 一旦某个文件被加到数据库并指向一个文件组,你就不能把这个文件
移向另一个文件组。
☆ 系统对象和文件永远指向主文件组。
☆ 关于文件组更进一步的讨论,参照你的SQL Server 7.0文档。
确保数据对象的唯一性
当你处理被多地点使用的大型数据库时,就像跨国公司的情景,你也
许会遇上确保表对象唯一性的问题。在此情况下UNIQUEIDENTIFIER也许正
是解决方法。UNIQUEIDENTIFIER是一个GUID数据类型,它存储了全局唯一
标识符。一个GUID是一个为确保唯一的二进制数,因此其他的计算机不能
生成同样的数值。
GUID的唯一值是由计算机网卡的识别数字加一个来自 CPU时钟的唯一
数值生成。网卡制造商保证每块网卡至少下100年识别数字的唯一性。
IQUEIDENTIFIER的值并不象 IDENTIT属性那样自动生成。为了给你表
对象生成一个UNIQUEIDENTIFIER值,你必须指定NEWID功能为列的缺省值。
例如,如果你想生成一个表,它列出你所有跨国公司辅助部门的最前
面的产品的净收入,而且你想指定一个GUID数据类型,你可以这样表示:
CREATE TABLE NetRevenueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10))
在数据库工具中,你可以在数据库图表或当你设计一个表时这样做。
为你需要唯一识别的列用SELECT Is RowGUID。缺省将会是(new()),它自
动生成RowGUID。
尽管有很多例子,你必须确保你的表对象唯一,如果你用到
UNIQUEIDENTIFIER,牢记下面数据类型的特征:
☆ 值是长的,模糊的.
☆ 值是随机的,并且下一个模式对用户是没意义的。
☆ 值在依靠连续增加的申请中是很难利用的。
☆ 值为16位,因此用这些值来建立的索引会很慢。
☆ 要得到更多的关于GUID数据类型信息,请参见SQL Server 7.0文档。
获得报表数据
总而言之,你使用的数据库工具的新 SQL Server7.0特性将使企业数
据库任务(像跨国公司)更有效,更可行。
用链接服务器和TOP语句,你就能够访问外部 OLE DB数据资源,并且
限制实际很长的结果列表得到你想要和能简单使用的结果。另外,如果文
件组和GUID数据类型被正确在数据库文件上执行,操作最终就能更有效、
更容易地完成。
这样,回到跨国公司的例子,看一看如何得到基于收入分析的结果集
合。
这里是一个SELECT语句,你可以在你的芝加哥总部使用数据库时运行
它。
SELECT TOP 50 NetRevenueTable.name, NetRevenueTable.net
FROM
(
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
UNION
SELECT Prod.name, Prod.net
FROM tokyo_jn.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
UNION
SELECT Prod.name, Prod.net
FROM london_uk.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
UNION
SELECT Prod.name, Prod.net
FROM buenosa_ag.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
UNION
SELECT Prod.name, Prod.net
FROM canberra_au.svs.dbo.products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
UNION
/*下面SELECT表达式是为来自芝加哥总部svs数据库的信息*/
SELECT Prod.name, Prod.net
FROM products AS Prod
WHERE date between '07/01/97' and '06/30/98'
AND Prod.net > 1
)
as NetRevenueTable
ORDER BY NetRevenueTable.net desc
查询结果应该会使你对公司的收入来源有很好的印象—这是你的分析
的一个好起点。祝你好运!
1999 Microsoft Corporation. All rights reserved. Terms of use.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -