我有一个包含几个这样的帐户字段的表:
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。
我有一个包含几个这样的帐户字段的表:
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。
ALTER TABLE ACCOUNT_TABLE
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED
如果您有大量记录,这将保留一个计算列,并且在选择中可能比在视图中或 UDF 中的计算执行得更好(一旦发生列的初始创建,这可能会非常缓慢,并且可能在低使用时间期间发生)。它会减慢插入和更新速度。通常,我发现用户对缓慢插入或更新的容忍度比选择延迟要好,除非您遇到锁定问题。
执行此操作的最佳方法在很大程度上取决于您的使用情况以及您需要什么样的性能。如果您没有很多记录,或者如果计算列不会被频繁调用,您可能不需要持久列,但如果您经常运行包含当年所有记录或其他大型记录集的报告数据,您可能会发现持久计算列更适合您。与任何这种性质的任务一样,了解哪种方法最适合您的情况的唯一方法是进行测试。
这是 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
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;
该列不会保留在表中,每次引用它时都会立即重新创建。您可以通过使用视图来获得相同的结果。如果您在计算列上使用过滤谓词或排序并希望在其上添加索引,请参阅在计算列上创建索引。
好吧,您可以创建 ACCOUNT_TABLE 的视图并对其进行查询。或者我相信你可以创建一个用户定义的函数来完成同样的事情。