计算列区别于需要我们手动或者程序给予赋值的列,它的值来源于该表中其它列的计算值。比如,一个表中包含有数量列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中计算列详解的更多相关文章

  1. 在sqlserver 中with(nolock)详解

      所有Select加 With (NoLock)解决阻塞死锁        在查询语句中使用 NOLOCK 和 READPAST  处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK  ...

  2. SQLSERVER中WITH(NOLOCK)详解

    在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...

  3. SqlHelper帮助类_上(SQLServer数据库含Connection详解)

    在操作数据库时,经常会用到自己封装的SqlHelper.这里主要对SQLServer数据库的Sqlhelper,主要用于在同一个连接中完成CRUD! 一.ADO.NET中的Connection详解: ...

  4. SVD在推荐系统中的应用详解以及算法推导

    SVD在推荐系统中的应用详解以及算法推导     出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推 ...

  5. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  6. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  7. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  8. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅   ...

  9. Asp.net中GridView使用详解(很全,很经典 转来的)

    Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l         ...

随机推荐

  1. Handler导致内存泄露分析

    (非静态)内部类引起内存泄漏的原因         内部类的实现其实是通过编译器的语法糖(Syntactic sugar)实现的,通过生成相应的子类即以OutClassName$InteriorCla ...

  2. Command 命令模式

    简介 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于[行为请求者]与[行为实现者]解耦,可实现二者之间的松耦合,以便适应变化. 将一个请求封装为一个对象,从而使你可用不同 ...

  3. noip 2010 关押罪犯 (二分图染色 并茶几)

    /* 二分图染色版本 两个监狱对应二部图的两部分 在给定的怨气值里二分 对于每一个Ci 进行染色判断是否合法 染色的时候 如果这条边的ci > Ci 这两个人就带分开 即染成不同的颜色 如果染色 ...

  4. 转载:C# HashSet 用法

    原文地址:http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930540.html   感谢博主分享! NET 3.5在System.Collect ...

  5. DHCP服务器

    DHCP指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码.首先,DHCP服务器必须是一台安装有Windows 2000 Server/Advanced ...

  6. angularJS学习手册(1)

    欢迎来到augularJS的学习 一.什么是angularJS? angular的英文意思是角,为什么要叫angular我也不知道. AngularJS是一个MV*(Model-View-Whatev ...

  7. StringBuilder和string.Format性能对比

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/sbformat.html StringBuilder的性能优于string.For ...

  8. C++变量的“总分性”(Mereology)

    Stroustrup 在自传中说自己在哲学上深受 Kierkegaard (吉爾凱高爾)的影响,而讨厌黑格尔.所以看 Stroustrup 的书,很少感受到抽象理论的重要性.这也影响了C++的文化:许 ...

  9. 临时设置 selinux

    setenforce 0             ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式

  10. 使用HTML+CSS,jQuery编写的简易计算器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...