如何在SQL Server中设置简单的计算字段?

时间:2009-08-13 21:10:26

标签: sql sql-server-2005 calculated-field

我有一个包含多个帐户字段的表格,如下所示:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

我经常需要将它们组合起来:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

我想要一个自动执行此操作的计算字段,因此我可以说:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

这样做的最佳方式是什么?

我正在使用SQL Server 2005。

4 个答案:

答案 0 :(得分:26)

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

这将保留计算列,如果你有大量记录,那么在选择中可能比在视图或UDF中的计算表现更好(一旦发生了列的初始创建,这可能会非常缓慢并且应该在期间发生使用时间短)。它会减慢插入和更新的速度。通常我发现用户可以比使用select中的延迟更好地容忍慢速插入或更新,除非您遇到锁定问题。

执行此操作的最佳方法将取决于您的使用情况以及所需的性能。如果您没有很多记录,或者如果不经常调用计算列,您可能不需要持久列,但如果您经常运行包含年度所有记录或其他大型集合的报表数据,您可能会发现持久计算列更适合您。与任何这种性质的任务一样,了解情况最佳的唯一方法是测试。

答案 1 :(得分:8)

这是View的绝佳选择。

CREATE VIEW vwACCOUNT_TABLE
AS

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE

GO

--now select from the View
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE

答案 2 :(得分:5)

ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

该列未持久保存在表中,每次引用时都会在该库中重新创建。您可以使用视图获得相同的结果。如果您对计算列使用过滤谓词或排序,并希望在其上添加索引,请参阅Creating Indexes on Computed Columns

答案 3 :(得分:3)

好吧,你可以创建一个ACCOUNT_TABLE视图并查询它。或者我相信你可以创建一个用户定义的函数来完成同样的事情。