学习无忧
开发频道 首页 | 入门 | 硬件 | 软件 | 设计 | 开发 | 网络 | 营销 | 社区 | 加油站
首页=>开发=>SQL Server=>使用CREATE TABLE语句声明一个计算列  
使用CREATE TABLE语句声明一个计算列
www.51study.net  2004-11-10 23:34
【字体:  】【评论打印】 【关闭
  追溯到关系数据库理论的创始人E. F. Codd,就出现了这样一个通用原则:永远不存储可被计算的数据。这个原则回避了这样一个问题:“我们应该在什么地方计算这个计算结果?”默认的答案是“在前台应用程序。”
  
  假设一个表包含SubTotal 和TaxRate 两个列。根据这一原则,“列”TaxAmount 和Total 应该是虚的。因此,将它们创建为视图或存储过程的一部分;或者,采用另外一种方法,将它们留给前台应用程序来计算并将结果呈现给用户。
  
  该原则的一个替代方案叫做计算列(computed column)。使用这个表达式,你就可以将一个计算列声明为 CREATE TABLE 语句的一部分,然而,它还可以下达给数据库(要么是通过图形用户界面 GUI 要么直接通过数据定义语言 DDL 指令)。
  
  假设一个数据库包含有房子粉刷估计。忽略一些细节,比如房子的窗户和门的数目(并假设所有的墙都粉刷成同样的颜色),还有两个问题需要解决:我们要将天花板粉刷成一样的颜色吗(一般答案都是“不要”),我们要粉刷几层(一般答案都是“两层”)?
  
  如果不使用计算列,我们就要把这些问题推迟到以后解决,并把结果计算任务交给前台应用程序来完成。有了计算列,我们就可以在数据库中嵌入公式,创建一个虚列提供给任何前台使用。
  
  可以使用下面这样的语句来创建表:
  
  CREATE TABLE [TestComputedColumns] (
   [PK] [int] IDENTITY (1, 1) NOT NULL ,
   [Length] [int] NOT NULL ,
   [Width] [int] NOT NULL ,
   [Height] [int] NOT NULL ,
   [Coats] [int] NOT NULL CONSTRAINT [DF_TestComputedColumns_Coats] DEFAULT
   (2),
   [IncludeCeiling] [bit] NOT NULL CONSTRAINT
   [DF_TestComputedColumns_IncludeCeiling] DEFAULT (0),
   [Area] AS ((2 * ([Height] * [Length] + [Height] * [Width]) + [Length] *
   [Width] * [IncludeCeiling]) * [Coats]),
   CONSTRAINT [PK_TestComputedColumns] PRIMARY KEY CLUSTERED
   (
   [PK]
   ) ON [PRIMARY]
  ) ON [PRIMARY]
  GO
  
  你不妨使用自己的前台程序,插入几行数据看其运行效果。例如,使用Access 2000 及更高版本 Access,创建一个 Access 数据项目(ADP,Access Data Project)指向你的数据库,选择表,然后创建一个 AutoFrom(自动窗体)。输入一两行数据然后翻回到你所输入的条目,你将看到计算列已经有了正确的值。
【字体:  】【评论打印】 【关闭
发表评论 共有0条评论   >> 查看详细评论
用户名: 密 码: 匿名评论
请发表评论时遵纪守法并注意语言文明!
 
用户名 评论内容
目前尚无评论!
 
文章搜索
关键字:
精彩文章回顾
 SQL Server 2
 ASP、JSP、PHP
 利用ASP技术开发基于W
 WORD和ACCESS的
 Access 数据库表规
 SQL Server的性
 SQL 非正常删除日志文
 拷贝的SQL Serve
广而告之
关于我们 | 广告服务 | 诚邀加盟 | 友情链接 | 网站地图 | 联系方式
Copyright ©1998-2005, All Rights Reserved.
版权所有 学习无忧网 51study.net
广告或空间合作,请QQ:70046085联系我