欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SqlServer2008实例22表基础之创建计算列

程序员文章站 2022-11-21 08:05:38
在CREATE TABLE或ALTER TABLE语句中定义的列可以源于独立的或者基于列的计算。如果需要在相关查询中对相同的数据重复计算,则计算列就变得很有用。计算列以创建表或修改表的时候定义的表达式为基础,除非使用了PERSISTED关键字,否则计算列不会物理保存在表中。 下面说明使用SQL Server 2005的PERSISTED选项的方法。通过CREATE或ALTER TABLE增加一个计算列的语法如下: column_name AS computed_column_expr......

    在CREATE TABLE或ALTER TABLE语句中定义的列可以源于独立的或者基于列的计算。如果需要在相关查询中对相同的数据重复计算,则计算列就变得很有用。计算列以创建表或修改表的时候定义的表达式为基础,除非使用了PERSISTED关键字,否则计算列不会物理保存在表中。
    下面说明使用SQL Server 2005的PERSISTED选项的方法。通过CREATE或ALTER TABLE增加一个计算列的语法如下:
    column_name AS computed_column_expression
    [PERSISTED]
    column_name是新列的名字。computed_ column_expression是你为了得到列的值而执行的计算。增加PERSISTED关键字能让计算的结果被物理保存。
    1.向既有表中加了一个新的计算列:

USE AdventureWorks
GO

ALTER TABLE Production.TransactionHistory
ADD CostPerUnit AS (ActualCost/Quantity)

2.    查询数量超过1O的最高的CostPerUnit:

USE AdventureWorks
GO

SELECT TOP 1 CostPerUnit,Quantity,ActualCost
FROM Production.TransactionHistory
WHERE Quantity>10
ORDER BY ActualCost DESC

SqlServer2008实例22表基础之创建计算列

    下一个创建一个PERSISTED计算列,这意味着计算后的数据实际上会物理地保存在数据库中(但仍然是由SQL Server自动计算):

CREATE TABLE HumanResources.CompanyStatistic
(
	CompanyID int NOT NULL,
	StockTicker char(4) NOT NULL,
	SharesOutStanding int NOT NULL,
	Shareholeders int NOT NULL,
	AvgSharesPerShareholder as (SharesOutStanding/Shareholeders) PERSISTED
)

    计算列不能用DEFAULT或者FOREIGN KEY约束。计算列不能被显式更新或插入(因为它的值都是计算出的)。
    计算列能用在索引中,但是一定要符合一些条件。比如是确定的(对于一组给定的输入总是返回相同的结果)和精确的(不包含浮点值)。
    增加了PERSISTED意味着数据被物理地保存在数据库中。对计算中使用的列进行的任何修改都会引起存储值的再一次更新。但是保存的数据仍然不可以直接修改——数据仍然要经过计算。然而和非持久化的方式不同,保存数据意味着列能用于表分区或者非精确(基于浮点)值的索引。
 

本文地址:https://blog.csdn.net/ngbshzhn/article/details/107319046