触发自动更新电子邮件字段?
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] 上应用业务规则=]列。
请注意,这需要列出所有要插入的列。假设您有 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
。这效率较低(因为您需要扫描 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
我正在尝试创建一个触发器,当在我的 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] 上应用业务规则=]列。
请注意,这需要列出所有要插入的列。假设您有 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
。这效率较低(因为您需要扫描 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