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

Trigger for automatically updating email field?

我正在尝试创建一个触发器,当在我的 StudentInformation table 中插入新行时未指定 Email 字段时触发该触发器。触发器应触发并使用以下模式更新电子邮件字段:

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

如果插入语句已经包含电子邮件地址,则触发器不会更新电子邮件字段。 (例如忽略触发器的动作)

所以像这样:

create trigger trg_assignEmail

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

有人可以帮忙吗?

在 SQL 服务器中,您通常会使用 instead of insert 触发器来执行此操作。

想法是 select 从伪 table inserted 中为 insert 给出的值,然后在 [=16] 上应用业务规则=]列。

请注意,这需要列出所有要插入的列。假设您有 firstNamelastNameemail,那就是:

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。这效率较低(因为您需要扫描 table 以查找修改后的行),但可以避免列出所有列。为此,我们需要一个主键 - 让我假设 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