Sql 自动更新电子邮件字段的触发器?
我正在尝试创建一个触发器,当在未指定Sql 自动更新电子邮件字段的触发器?,sql,sql-server,tsql,sql-insert,database-trigger,Sql,Sql Server,Tsql,Sql Insert,Database Trigger,我正在尝试创建一个触发器,当在未指定电子邮件字段的情况下,将新行插入我的学生信息表时触发该触发器。触发器应触发并使用以下模式更新电子邮件字段: firstName.lastName@disney.com(e.g. Erik Kellener would be Erik.Kellener@disney.com) 如果insert语句已包含电子邮件地址,则触发器不会更新电子邮件字段。(例如忽略触发器的动作) 比如说: create trigger trg_assignEmail on Stude
电子邮件
字段的情况下,将新行插入我的学生信息
表时触发该触发器。触发器应触发并使用以下模式更新电子邮件字段:
firstName.lastName@disney.com(e.g. Erik Kellener would be Erik.Kellener@disney.com)
如果insert语句已包含电子邮件地址,则触发器不会更新电子邮件字段。(例如忽略触发器的动作)
比如说:
create trigger trg_assignEmail
on StudentInformation
for insert
as begin
if (email is null ) then
update email
set email = (pattern)
....
有人能帮忙吗?在SQL Server中,通常使用
而不是insert
触发器来完成此操作
其思想是从伪表inserted
中选择为insert
指定的值,然后在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
另一种方法是在插入后使用触发器更新电子邮件为空的最后插入行。这效率较低(因为您需要扫描表中修改的行),但可以避免列出所有列。为此,我们需要一个主键-让我假设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
非常感谢。我的表中的列很多,有没有办法不要求列出所有列呢?@MuhammedTech:我明白。请参阅我的最新答案。