使用触发器在插入新行时自动更新字段



我有这个表Studentinformation
我想创建一个触发器,这样每当插入新行时,如果没有指定Email列,触发器就会触发并自动更新Email列。电子邮件格式将类似于FirstNameLastName@youremail.com

例如:('John','Smith'(
这看起来像:JohnSmith@youremail.com

但是,如果插入语句已经包含电子邮件地址,则触发器不会更新电子邮件字段

有人能帮我写或修改到目前为止的查询吗

Studentinformation表:

CREATE TABLE Studentinformation (
StudentID int NOT NULL IDENTITY(100,1) PRIMARY KEY,
Title char(10) NULL,
FirstName char(10) NULL,
LastName char(10) NULL,
Address1 char(50) NULL,
Address2 char(50) NULL,
City char(50) NULL,
County char(50) NULL,
Zip char(10) NULL,
Country char(50) NULL,
Telephone char(10) NULL,
Email varchar(255) NULL,
Enrolled char(10) NULL,
AltTelephone char(10) NULL);

到目前为止我拥有的:

-- This code creates a trigger
DROP TRIGGER IF EXISTS trg_assignEmail;
CREATE TRIGGER trg_assignEmail ON Studentinformation
FOR INSERT
AS
UPDATE Studentinformation
SET Email = FirstName+'.'+LastName+'@youremail.com'

提前谢谢!

您需要的基本语句如下。使用仅包含为当前服务器进程插入的行的插入的表,在其主键上联接回该表,并仅更新插入的非空行(暗示也不是NULL(。

update s 
set s.email = Concat(s.FirstName, '.', s.LastName, '@youremail.com')
from inserted i 
join Studentinformation s on s.StudentId = i.StudentId 
where i.email != '';

我用ISNULL函数完成了答案。

CREATE TRIGGER trg_assignEmail ON Studentinformation
After INSERT
AS  
UPDATE s
SET Email = Isnull(i.Email, Concat(i.FirstName, '.', i.LastName,'@youremail.com'))
FROM inserted i JOIN Studentinformation s on s.StudentId = i.StudentId

最新更新