SqlServer中计算列详解
计算列区别于需要我们手动或者程序给予赋值的列,它的值来源于该表中其它列的计算值。比如,一个表中包含有数量列Number与单价列Price,我们就可以创建计算列金额Amount来表示数量*单价的结果值,创建Amount列后,在程序中需要使用计算金额这个值时,就不用取出Number列与Price列的值后相乘,而是直接取Amount列的值就可以了。
那么这个计算列要如何建立呢?
先看通过sql的方法创建:
create table table1
(
number decimal(18,4),
price money,
Amount as number*price --这里就是计算列
)
计算列是不需要我们指定数据类型与是否允许为null等信息的,SqlServer会根据情况自动赋予数据类型。
在microsoft sql server management studio建创计算列更是简单。如下图所示,只要在列属性中的"计算所得的列规范"-"公式"中填写计算列的公式就可以了。
在上面的图片中我们也看到有"是持久的"这个选项,这个选项有什么用呢?
计算列如果没有特殊的设定,它将会是一个虚拟列,也就是这个列实际上是不存在的,只是每次要取这列的值时,sql会按照计算列的公式计算一次,再把结果返回给我们。这样就会存在一些问题,比如,每次计算都会消耗一定的时间,而且也不能在这个列上创建索引。那么能不能把计算列的结果存起来,每次取数据的时候直接把结果返回给我们,而不用每次去计算。呵呵,恭喜你,创建计算列时把"是持久的"这个选项勾起来,就能达到我们的目的了,这时候,计算列就是一个实实在在的列,也可以在该列上创建索引了。
如果要查看所有已经存在计算列以及该计算列是否为"是持久的",可以利用sys.computed_columns视图
注意:
1,计算列如果没有设置为"是持久的",那么它是不可以用来做check,foreign key或not null约束。当然,如果我们在microsoft sql server management studio为计算列设置了check等约束了,sql server会自动将该列设置为"是持久的"。
2,计算列不可以再次用来作为中一个计算列的一部分。
3,在触发器,不可以对计算列进行update判断,否则会报如下错误:
列”不能在IF UPDATE子句中使用,因为它是计算列。”
SqlServer中计算列详解的更多相关文章
- 在sqlserver 中with(nolock)详解
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK ...
- SQLSERVER中WITH(NOLOCK)详解
在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...
- SqlHelper帮助类_上(SQLServer数据库含Connection详解)
在操作数据库时,经常会用到自己封装的SqlHelper.这里主要对SQLServer数据库的Sqlhelper,主要用于在同一个连接中完成CRUD! 一.ADO.NET中的Connection详解: ...
- SVD在推荐系统中的应用详解以及算法推导
SVD在推荐系统中的应用详解以及算法推导 出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推 ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- Android中mesure过程详解
我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- DevExpress控件GridControl中的布局详解 【转】
DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28| 分类: devexpress | 标签:devexpress |举报|字号 订阅 ...
- Asp.net中GridView使用详解(很全,很经典 转来的)
Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l ...
随机推荐
- GIT学习(一)-->Git产生的历史原因
首先要说:Git是目前世界上最先进的分布式版本控制系统(没有之一). git的作者:Linus,林纳斯(下图就是,先膜拜一下,因为成就可不止这一点) 他是为何要写git的呢?话说 Linus虽然创建了 ...
- System.Web.HttpContext.Current.Session获取值出错
在自定义类库CS文件里使用System.Web.HttpContext.Current.Session获取Session时提示错误:未将对象引用设置到对象的实例. 一般情况下通过这种方式获取Sessi ...
- XlFileFormat
-----转载:http://hi.baidu.com/liu_haitao/item/900ddb38979188c22f8ec26e 18 XlFileFormat.xlAddIn Microso ...
- c - 根据首字母判断星期几
#include <stdio.h> #include <ctype.h> /* 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. */ ...
- 合理计划 dictionary cache 大小
[数据字典缓冲区(Data Dictionary Cache) ] 用于存放Oracle系统管理自身所需要的所有信息,包括登录的用户名.用户对象.权限等. 查看 data dictionary ca ...
- Foudation框架之一些常用结构体和常用类
表示范围作用的结构体:NSRange: 有三种方式创建新的NSRange: 1.NSRange range: range.location = 17; ...
- iOS开发常用的第三方框架
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- MySQL UPDATE
MySQL UPDATE 查询 如果我们需要修改或更新MySQL中的数据,我们可以使用 SQL UPDATE 命令来操作.. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用SQL语 ...
- Linux系统中,main函数的执行过程
http://blog.csdn.net/rrerre/article/details/6728431
- 由问题引出的fsck命令
博客停了两天,今天打开linux虚拟机,突然间报错了,顿时心中一喜(是吗?),当时看了下错误说明,好像有关于时间的问题(某个时间是未来时间)..然后我就去兴匆匆的修改系统时间,重启...唉,没作用.只 ...