Второе условие не может быть выполнено с использованием вычисляемого столбца, если только вычисляемый столбец не объявлен persisted
.
Но для того, чтобы вычисляемый столбец сохранялся, он должен основываться на детерминированности. c функция - и Rand
недетерминирован c.
Однако вы можете использовать триггер для вычисления столбца:
CREATE TRIGGER tr_Persons_InsteadOfInsert
ON dbo.Persons
INSTEAD OF INSERT
AS
INSERT INTO dbo.Persons (Name, SurName, NumberOfNotes, TotalCach, Result)
SELECT Name
, SurName
, NumberOfNotes
, TotalCach
, CASE WHEN TotalCach IS NOT NULL AND Result IS NULL THEN
[NumberOfNotes] * [TotalCash] * (RAND()*(100-30)+30)
ELSE
Result
END)
FROM Inserted
GO
Из Конечно, это будет означать, что столбец Result
должен быть обычным столбцом, а не вычисляемым столбцом, я предполагаю, что вы хотите, чтобы он был float
- поэтому вы должны изменить определение этого столбца.