我正在尝试创建一个触发器,当在没有指定StudentInformation
字段的情况下将新行插入到Email
表中时将触发该触发器。触发器应使用以下模式触发并更新电子邮件字段:
[email protected](e.g. Erik Kellener would be [email protected])
如果插入语句已经包含电子邮件地址,则触发器不会更新电子邮件字段。 (例如忽略触发器的动作)
所以像这样:
create trigger trg_assignEmail
on StudentInformation
for insert
as begin
if (email is null ) then
update email
set email = (pattern)
....
有人可以帮忙吗?
在SQL Server中,通常使用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
作为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