Создать триггер для присвоения значения для нуля - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь создать триггер в SSMS, где, если Email является нулем для новой вставленной строки, затем добавить электронную почту, используя FirstName + LastName +'@gmail.com'

Вот то, что у меня есть, но это определенно не выглядит правильно:

Drop Trigger if exists trg_assignEmail
Go
Create Trigger 
    trg_assignEmail 
On StudentInformation
For Insert 
As
Begin
    Insert Into StudentInformation
    Set Email = Null
    Select rtrim(FirstName + LastName) + '@gmail.com'
    From StudentInformation
Where Email is Null

Схема:

Create Table StudentInformation (
    StudentID int not null identity (100,1),
    Title nchar(50) null, 
    FirstName nchar (50) null,
    LastName nchar (50) null,
    Address1 nchar (50) null,
    Address2 nchar (50) null,
    City nchar (50) null, 
    County nchar (50) null,
    Zip nchar (10) null, 
    Country nchar (50) null,
    Telephone nchar (50) null,
    Email nchar (50) null, 
    Enrolled nchar (50) null,
    AltTelephone nchar(50) null
    Constraint PK_StudentID Primary Key (StudentID)
);

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

до 2017 года, попробуйте. не то чтобы trim () нельзя было заменить на rtrim () или ltrim (), а также обрабатывает пустую строку (обычно для приложений при использовании формы для сохранения)

Create Trigger 
    trg_assignEmail 
On StudentInformation
For Insert 
As
Begin
    declare @email as nchar(50)
        ,@id int
    select @email = Email, @id = StudentID from inserted
    if nullif(@email,'') is null 
        begin
            update StudentInformation
            set Email = rtrim(FirstName + LastName) + '@gmail.com'
            where StudentID = @id
        end
end
0 голосов
/ 13 марта 2019

Код триггера вызывает различные ошибки: для начала, INSERT ... SET ... FROM ... не является допустимым синтаксисом SQL.

Я думаю, что подходящим подходом для вашего варианта использования было бы создание триггера AFTER INSERT, который будет проверять только что вставленные значения (используя псевдотаблицу inserted) и обновлять Email при необходимости. .

CREATE TRIGGER trg_assignEmail ON StudentInformation
AFTER INSERT
As
BEGIN
    UPDATE s
    SET s.Email = TRIM(i.FirstName) + TRIM(i.LastName) + '@gmail.com'
    FROM StudentInformation s
    INNER JOIN inserted i ON i.StudentID = s.StudentID AND i.email IS NULL
END

INNER JOIN на inserted используется для выбора записи, которая была только что вставлена, , если нет Email.

Демонстрация на DB Fiddle :

insert into StudentInformation(Title, FirstName, LastName) values('Foo', 'Bar', 'Baz');
select Title, FirstName, LastName, Email from StudentInformation;
Title | FirstName | LastName | Email                                             
:-----| :---------| :--------| :----------------
Foo   | Bar       | Baz      | BarBaz@gmail.com                                  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...