SqlServer中计算列详解
来源:互联网 发布:手机linux终端 编辑:程序博客网 时间:2024/05/16 12:56
http://www.lmwlove.com/ac/ID785
计算列区别于需要我们手动或者程序给予赋值的列,它的值来源于该表中其它列的计算值。比如,一个表中包含有数量列Number与单价列Price,我们就可以创建计算列金额Amount来表示数量*单价的结果值,创建Amount列后,在程序中需要使用计算金额这个值时,就不用取出Number列与Price列的值后相乘,而是直接取Amount列的值就可以了。
那么这个计算列要如何建立呢?
先看通过sql的方法创建:
create table table1
(
number decimal(18,4),
price money,
Amount as number*price --这里就是计算列
)
(
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中计算列详解和winform中改变DataGridView中符合条件的字体的颜色和列的颜色
- sqlserver数据表(计算列)表分区
- Oracle、SqlServer中合并列
- sqlserver中修改自增列
- sqlserver 中with(nolock)详解
- sqlserver中计算结果保留小数
- powerbuilder datawindow中插入计算列
- SQLServer中 如何取出一个表的所有列名
- sqlserver中可以增加一个自增长列
- 将SQLSERVER中所有表的列信息显示出来
- SQLServer中如何取出一个表的所有列名
- sqlserver中关于text/ntext列的一些处理技巧
- SQLServer 2005中如何列所有存储过程
- SQLServer中 如何取出一个表的所有列名
- SQLServer 2005中列所有存储过程方法
- oracle和sqlserver sql结果中添加序号列
- SQLServer中实现Oracle多列条件in
- Android中短信拦截解决方案
- OpenRisc-23-基于openrisc的SOC开发
- jquery的map和get方法
- 显示常见数字格式 替换符
- javascript特效大集合
- SqlServer中计算列详解
- C++编程学习50个经典网站 强力推荐
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 win2008R2 X64 IIS7.5
- qemu翻译和执行流程分析
- 简明 Vim 练级攻略(转)
- javascript特效大集合
- access 导入 sqlserver
- 黑马程序员-----面向对象
- Why does the asp.net website administration tool give timeout message (mysql db)?