【问题标题】:When are persisted computed columns updated?什么时候更新持久计算列?
【发布时间】:2015-08-03 13:43:47
【问题描述】:

运行SQL Server 2014MSDN 声明标记为PERSISTED 的计算列的值“在其计算中的任何列发生更改时更新”。它们是指表的整列还是实际行

例如如果我有一个表T 和一个持久计算列Bar,如下所示,如果我在T 中插入一个新行,是否会重新计算Bar? (整个列确实发生了变化,但实际行没有变化。)

CREATE FUNCTION dbo.Baz(@foo INT)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
    RETURN @foo % 10 -- Could be more complex! E.g. SELECT ...
END
GO

CREATE TABLE T 
(
    ID INT IDENTITY(1,1) NOT NULL,
    Foo INT NOT NULL,
    Bar AS dbo.Baz(Foo) PERSISTED
)
GO

【问题讨论】:

    标签: sql-server sql-server-2014 calculated-columns


    【解决方案1】:

    计算列意味着仅依赖于同一行中的其他列值(加上表达式、常量等)。因此,您的问题没有多大意义。

    但是,有些人通过使用 UDF 来做“聪明”的事情,以便他们可以访问其他表中的其他数据或同一表中的其他行,作为其计算列定义的一部分。 SQL Server 不知道这种“聪明”,因此,如果 UDF 正在访问其他数据,不,它不能保证为实际上不受 DML 语句影响的任何行更新此类计算列的值。

    【讨论】:

    • 谢谢。这很有意义。
    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多