每次创建表时都会计算列

时间:2020-04-09 21:56:47

标签: sql sql-server calculated-columns

我有以下创建表的脚本:

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)
);

该表已正确创建,每当我插入一个新人时,都会计算Result。问题是每次我进行选择时都会重新评估它。我希望该记录的计算值保持不变。我该如何实现?预先感谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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