正在运行SQL Server 2014
。 MSDN声明标记为PERSISTED
的计算列的值是"当计算中的任何列更改为" 时,它们会更新。他们是指表格的整列还是实际行?
例如如果我有一个表T
,其持久计算列Bar
如下所示,如果我插入一个新行,我会重新计算Bar
T
? (整个列确实发生了变化,但实际行没有变化。)
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
答案 0 :(得分:1)
计算列意味着仅依赖于同一行中的其他列值(加上表达式,常量等)。因此,你的问题没有多大意义。
然而,有些人做得很聪明"通过使用UDF使它们可以访问其他表中的其他数据或同一个表中的其他行作为其计算列定义的一部分。 SQL Server并不知道这个"聪明"因此,如果UDF正在访问其他数据,则不能保证为任何实际上不受DML语句影响的行更新此类计算列的值。