自动更新电子邮件字段的sql触发器?

yftpprvb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(338)

我试图创建一个触发器,当新行插入到我的 StudentInformation 不带 Email 指定的字段。触发器应触发并用以下模式更新电子邮件字段:

firstName.lastName@disney.com(e.g. Erik Kellener would be Erik.Kellener@disney.com)

如果insert语句已包含电子邮件地址,则触发器不会更新电子邮件字段(e、 g忽略触发器的动作)
比如说:

create trigger trg_assignEmail

on StudentInformation
for insert
as begin
     if (email is null ) then
     update email 
     set email = (pattern)
....

有人能帮忙吗?

dgenwo3n

dgenwo3n1#

在sql server中,通常使用 instead of insert 触发。
我们的想法是 select 给定的值 insert 从伪表 inserted ,然后将业务规则应用于 email 列。
请注意,这需要列出insert的所有列。假设你有 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 最后插入的行 emailnull . 这样效率较低(因为您需要扫描表以查找修改过的行),但可以避免列出所有列。为此,我们需要一个主键-让我假设 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

相关问题