创建 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 时为其分配一个值。
我有以下创建 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 时为其分配一个值。