我需要创建一个专栏age
在 SQL Server 数据库中。
该列的值应根据该列的值计算DOB
.
它的值也应该增加Age
增加。
您应该使用计算列来解决此问题。其定义与此类似:
ALTER TABLE Customers ADD Age AS datediff(year, DOB ,getdate())
原始声明摘自,更多信息可在黑黄蜂 http://www.blackwasp.co.uk/SQLComputedColumns.aspx.
Edit:
MSDN 将计算列解释为:
计算列是根据可以使用其他表达式的表达式计算得出的
同一个表中的列。表达式可以是非计算列
名称、常量、函数以及它们的任意组合
一名或多名操作员。该表达式不能是子查询。
除非另有说明,计算列是虚拟列,
没有物理存储在表中。它们的值被重新计算
每次在查询中引用它们时。数据库引擎使用
CREATE TABLE 和 ALTER TABLE 语句中的 PERSISTED 关键字
将计算列物理存储在表中。他们的价值观是
当计算中的任何列发生变化时更新。经过
将计算列标记为 PERSISTED,您可以在
确定性但不精确的计算列。此外,
如果计算列引用 CLR 函数,数据库引擎
无法验证该函数是否真正具有确定性。在这个
在这种情况下,计算列必须是 PERSISTED,以便索引可以
在其上创建。有关详细信息,请参阅在计算上创建索引
列。
计算列可用于选择列表、WHERE 子句、ORDER BY
子句或任何其他可以使用正则表达式的位置
使用,但以下情况除外:
必须标记用作 CHECK、FOREIGN KEY 或 NOT NULL 约束的计算列
坚持。计算列可以用作索引中的键列或任何索引的一部分
PRIMARY KEY 或 UNIQUE 约束(如果计算列值由
索引中允许确定性表达式和结果的数据类型
列。
例如,如果表具有整数列 a 和 b,则计算列 a + b 可以是
已建立索引,但计算列 a + DATEPART(dd, GETDATE()) 无法建立索引,因为
> 在后续调用中值可能会发生变化。
计算列不能作为 INSERT 或 UPDATE 语句的目标。
数据库引擎自动确定可为空性
基于所使用的表达式的计算列。大多数的结果
即使只有不可为空的列,表达式也被视为可为空
存在,因为可能的下溢或溢出会产生
结果也为空。将 COLUMNPROPERTY 函数与
AllowsNull 属性可调查任何计算的可为空性
表中的列。可为空的表达式可以转换为
通过指定 ISNULL(check_expression,constant) 来不可为空,
其中常量是替换任何空结果的非空值。
Source: MSDN - 计算列 http://msdn.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)