zoukankan      html  css  js  c++  java
  • 【SqlServer】SqlServer中的计算列

      计算列区别于需要我们手动或者程序给予赋值的列,它的值来源于该表中其它列的计算值。比如,一个表中包含有数量列Number与单价列Price,我们就可以创建计算列金额Amount来表示数量*单价的结果值,创建Amount列后,在程序中需要使用计算金额这个值时,就不用取出Number列与Price列的值后相乘,而是直接取Amount列的值就可以了。

    #创建方法:

     1、通过sql的方法创建:

    1 create table table1
    2 (
    3     Number int,
    4     Price money,
    5     Amount as Number*Price --计算列
    6 )

      计算列是不需要我们指定数据类型与是否允许为null等信息的,SqlServer会根据情况自动赋予数据类型。

    2、在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子句中使用,因为它是计算列。”

    ------------------------------------------------------------------

  • 相关阅读:
    Spring MVC与JAX-RS比较与分析
    JDK历史版本下载
    第六篇:为多态基类声明虚析构函数
    第五篇:明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数
    第四篇:了解 C++ 默默编写并调用的函数
    第三篇:确保对象在被使用前的初始化
    poj 2125(最小割)
    hdu 4704(费马小定理)
    hdu 4705(树形DP)
    poj 3469(网络流模版)
  • 原文地址:https://www.cnblogs.com/willingtolove/p/9226254.html
Copyright © 2011-2022 走看看