我有一个包含多个帐户字段的表格,如下所示:
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。
答案 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视图并查询它。或者我相信你可以创建一个用户定义的函数来完成同样的事情。