Решение 1 - Использование sp_send_dbmail
Вот пример создания триггера, который отправляет электронную почту, когда событие INSERT / UPDATE / DELETE происходит в определенной таблице:
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL
DROP TRIGGER Sales.reminder2;
GO
CREATE TRIGGER reminder2
ON Sales.Customer
AFTER INSERT, UPDATE, DELETE
AS
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks2008R2 Administrator',
@recipients = 'danw@Adventure-Works.com',
@body = 'Don''t forget to print a report for the sales force.',
@subject = 'Reminder';
GO
Источник: http://msdn.microsoft.com/en-us/library/ms189799.aspx
sp_send_dbmail
был представлен в SQL Server 2005. Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms190307.aspx
Примечание:
Доuse, База данных Mail должна быть включена с помощью мастера настройки базы данных Mail, инструмента настройки контактной зоны SQL Server или sp_configure.
Решение 2 - Использование xp_cmdshell
Если вы не можете настроить Почту базы данных, у вас есть другая опция: xp_cmdshell
.С его помощью вы можете запускать команды командной строки в инструкциях SQL, например, небольшом инструменте отправки электронной почты.
Это небольшой пример того, как отправлять электронные письма, используя System.Net.Mail
в приложении C #: http://weblogs.asp.net/scottgu/archive/2005/12/10/432854.aspx
Как использовать xp_cmdshell
: http://msdn.microsoft.com/en-us/library/aa260689%28v=sql.80%29.aspx
Итак, вы создаете небольшое консольное приложение C #, которое отправляет электронную почту, а затем запускаете его с xp_cmdshell
прямо из вашего оператора SQL.
Решение 3. Использование службы Windows (по своему усмотрению)
Служба Windows не может самостоятельно определить, обновляются ли строки в базе данных MSSQL.Вам необходимо зарегистрировать изменения.Для этого вы можете создать триггер для определенной таблицы для записи изменений.Под записью изменений я имею в виду вставку новой строки в таблицу log
без триггера, например:
USE MyDatabase;
GO
IF OBJECT_ID ('Products.TRRowUpdated','TR') IS NOT NULL
DROP TRIGGER Products.TRRowUpdated;
GO
CREATE TRIGGER TRRowUpdated
ON Products
AFTER INSERT, UPDATE, DELETE
AS
INSERT INTO log ('Message', 'Date') VALUES ('Products table got modified', GETTIME())
GO
Создать проект службы Windows так же просто, как создать консольное приложение с помощью Visual Studio.
Затем ваша служба будет читать таблицу 'log', как каждую минуту, и отправлять электронные письма, если в ней есть какие-либо строки (и, конечно, удаляет их).
Можно определить, какие измененияпроизошло: ВСТАВИТЬ, ОБНОВИТЬ или УДАЛИТЬ.Смотрите комментарии на этом сайте для более подробной информации: http://msdn.microsoft.com/en-us/library/ms189799.aspx