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

问题描述 投票:1回答:1

我正在尝试创建一个触发器,当在没有指定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 sql-server tsql sql-insert database-trigger
1个回答
2
投票

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

想法是select从伪表insert中为inserted给出的值,然后将业务规则应用于email列。

注意,这需要列出所有要插入的列。假设您有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的最后插入的行。这效率较低(因为您需要在表中扫描已修改的行),但是可以避免列出所有列。为此,我们需要一个主键-让我假设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
© www.soinside.com 2019 - 2024. All rights reserved.