На сервере SQL вы обычно делаете это с помощью триггера instead of insert
.
Идея состоит в том, чтобы select
значения, которые были заданы для insert
из псевдотаблицы inserted
, а затем применить бизнес-правило к столбцу email
.
Примечание что для этого требуется перечислить все столбцы для вставки. Предполагая, что у вас есть firstName
, lastName
и email
, это будет:
create trigger trgAssignEmail on StudentInformation
instead of insert
as
set nocount on
insert into StudentInformation(firstName, lastName, email)
select
firstName,
lastName,
coalesce(email, firstName + '.' + lastName + '@disney.com')
from inserted
Альтернативой является использование after insert
триггера, который update
s последняя вставленная строка (s ), для которого email
равно null
. Это менее эффективно (поскольку вам нужно сканировать таблицу на предмет измененных строк), но избавляет вас от перечисления всех столбцов. Для этого нам понадобится первичный ключ - допустим, id
:
create trigger trgAssignEmail on StudentInformation
after insert
as
set nocount on
update s
set s.email = s.firstName + '.' + s.lastName + '@disney.com'
from StudentInformation s
inner join inserted i on i.id = s.id
where s.email is null