创建 table 时的计算列每次都会被评估

Computed column at creation of table gets evaluated every time

我有以下创建 table 的脚本:

CREATE TABLE [dbo].[Persons] 
(
    [Id]            INT IDENTITY(1,1) NOT NULL,
    [Name]          NVARCHAR(250)     NOT NULL,
    [Surname]       NVARCHAR(250)     NOT NULL,
    [NumberOfNotes] INT               NOT NULL,
    [TotalCash]     FLOAT             NOT NULL,
    [Result] AS ([NumberOfNotes] * [TotalCash] * ROUND(RAND() * 2, 0)),

    CONSTRAINT [PK_Persons] PRIMARY KEY ([Id] ASC)
);

table 被正确创建,每当我插入一个新人时,Result 就会被计算出来。问题是每次我做 select 时都会重新评估它。我希望该记录的计算值保持不变。我如何实现这一目标?提前致谢!

我的简单技巧是播种 rand():

[Result] AS ([NumberOfNotes] * [TotalCash] * ROUND(RAND(id) * 2, 0)),

基本上,这是使用 "deterministic" 随机数生成器。您也可以通过其他方式做到这一点。

或者,您可以在将新行插入 table 时为其分配一个值。