• sqlserver创建计算列 转


    转 http://www.cnblogs.com/lgx5/p/6017874.html

    表中其它列的计算值

    创建的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子句中使用,因为它是计算列。”

  • 相关阅读:
    window、BOM、 document、 DOM
    React事件处理和原生JS事件处理
    React项目性能优化
    React条件渲染
    Aqua Data Studio中文乱码
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    Myeclipse 全局搜索的时候报错problems encountered during text search
    PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
    工作总结
    前进中不能迷失方向--Java程序员职业发展路线
  • 原文地址:https://www.cnblogs.com/mmbbflyer/p/7485012.html
Copyright © 2020-2023  润新知