Вычисляемый столбец при создании таблицы оценивается каждый раз - PullRequest
1 голос
/ 10 апреля 2020

У меня есть следующий скрипт, который создает таблицу:

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 Ответ

1 голос
/ 10 апреля 2020

Я простой трюк состоит в том, чтобы засевать rand():

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

По сути, это использует генератор случайных чисел "terministi c ". Вы можете сделать это и другими способами.

В качестве альтернативы, вы можете просто присвоить ему значение при вставке новых строк в таблицу.

...