Как говорит ошибка, вы не можете изменить вставленный.Таблица Calcul уже будет содержать строки, представленные вставкой в момент вызова триггера;поэтому вы работаете непосредственно с этими данными.Поскольку существует возможность вставки нескольких строк одновременно, вам не следует работать с локальными переменными, а работать с набором:
create trigger TCalcul
on dbo.Calcul
after insert
as
begin
set nocount on
update Calcul
set Resultat = case Calcul.Op
when '+' then Calcul.Num1 + Calcul.Num2
when '-' then Calcul.Num1 - Calcul.Num2
when '*' then Calcul.Num1 * Calcul.Num2
when '/' then Calcul.Num1 / Calcul.Num2
else null end
from Calcul inner join Inserted on Calcul.ID = Inserted.ID
end
go
Если по какой-то причине вы не можете использовать set, то вам следует использовать курсор для перехода по вставленным строкам.
Примечание: я предполагаю, что у Calcul есть первичный ключ с именем ID;он вам определенно понадобится при работе с триггерами.
РЕДАКТИРОВАТЬ:
SET NOCOUNT ON указывает Sql Server не возвращать сообщение клиенту о том, сколько строк было затронутоОперация.Он часто используется в триггерах, чтобы избежать отправки информации, которая может конфликтовать с количеством строк исходного запроса (вставить, обновить или удалить, вызвавший срабатывание триггера).Лучше всего ставить его в начале каждого триггера, так как select также возвращает это сообщение.