Триггер, который проверяет значения из таблицы INSERTED
и выполняет sp_send_dbmail
, если это значение превышает указанное число, может использоваться для этого.Пример триггера ниже.Использование sp_send_dbmail
потребует правильной настройки Database Mail, если вы этого еще не сделали.Более подробную информацию о Database Mail и ее настройке можно найти здесь .Курсор используется для отправки электронного письма для каждой новой строки, которая была добавлена / обновлена.Поскольку вы хотите получать данные только из новых или обновленных строк, они получаются из таблицы INSERTED
вместо запроса, а затем используются для построения параметра @body
из sp_send_dbmail
.Обратите внимание, что CONCAT
используется для защиты нулей, как если бы несколько строк добавлялись вместе с оператором +
и одна из них была нулевой, вся объединенная строка была бы нулевой.Однако, если используется CONCAT
, ненулевые строки все равно будут сохранены.Переменная таблицы используется для первоначального получения значений из таблицы INSERTED
, которые впоследствии будут вводиться в курсор.Таблица INSERTED
будет захватывать значения из операций INSERT
и UPDATE
.От вашего вопроса кажется, что вы все еще хотели добавить новую ценность в таблицу, поэтому был использован триггер AFTER
.
CREATE TRIGGER dbo.TestTrigger
ON YourDatabase.YourSchema.YourTable
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @NewColumn3 INT;
DECLARE @NewName VARCHAR(25);
DECLARE @NewDepartment VARCHAR(25);
DECLARE @Tab Table (COLUMN3 INT, NAME VARCHAR(25), DEPARTMENT VARCHAR(25));
DECLARE @Message VARCHAR(2000);
INSERT INTO @Tab
SELECT COLUMN3, NAME, DEPARTMENT
FROM INSERTED
IF EXISTS((SELECT COLUMN3 FROM @Tab where COLUMN3 > 0))
BEGIN
--make sure to only add data from rows where COLUMN3 > 0
DECLARE EmailCursor CURSOR FOR
SELECT COLUMN3, NAME, DEPARTMENT FROM @Tab WHERE COLUMN3 > 0
OPEN EmailCursor
FETCH NEXT FROM EmailCursor
INTO @NewVal, @NewName, @NewDepartment
--while there are still rows
WHILE (@@FETCH_STATUS = 0)
BEGIN
--use CONCAT to avoid null value voiding message
SET @Message = CONCAT('Name ', @NewName, ' from department ', @NewDepartment, ' added a value of ', @NewVal)
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'YourProfileName',
@recipients = 'EmailAddress@domain.com',
@body = @Message,
@subject = 'Email Subject';
FETCH NEXT FROM EmailCursor
INTO @NewVal, @NewName, @NewDepartment
END
CLOSE EmailCursor
DEALLOCATE EmailCursor
END
END