Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 自动更新电子邮件字段的触发器?_Sql_Sql Server_Tsql_Sql Insert_Database Trigger - Fatal编程技术网

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:我明白。请参阅我的最新答案。