Единственная проблема, которую я вижу, состоит в том, что с этой техникой (если у вас нет чего-то встроенного в процессоры) вы не будете автоматически уведомлены, если что-то пойдет не так, или в этом случае, если оно завершится успешно.
В SQL Server Express вы можете добавить функцию CLR, которую можно использовать для отправки вам электронного письма с отчетом о результатах вышеупомянутых sprocs.
А вот как вы это сделаете, используя все бесплатные инструменты.
Сначала Убедитесь, что включена интеграция CLR, выполнив эту команду
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Вам также потребуетсяподписать сборку или пометить БД как надежную.Чтобы пометить надежную БД, убедитесь, что вы вошли в SQL Server как член роли SysAdmin и выполните эту команду
ALTER DATABASE YourDBName SET TRUSTWORTHY ON;
Далее сохраните следующее как C: \ Code \ DBEmail.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure()]
public static void DBEmail(string Sender, string SendTo, string Subject, string Body, string mailServer)
{
System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage();
m.From = new System.Net.Mail.MailAddress(Sender);
m.To.Add(new System.Net.Mail.MailAddress(SendTo));
m.Subject = Subject;
m.Body = Body;
System.Net.Mail.SmtpClient client = null;
client = new System.Net.Mail.SmtpClient();
client.Host = mailServer;
client.Send(m);
}
}
Затем найдите компилятор строки C # Comand в соответствующем каталоге .Net Framework, в моем случае это «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727») и выполните его.
csc.exe /target:library /out:C:\Code\DBEmail.dll C:\Code\DBEmail.cs
Затем скопируйте полученный C: \ Code \ DBEmail.dll на SQL Server, если вы еще не подключены к нему, и в Management Studio выполните это.
CREATE ASSEMBLY [DBEmail]
AUTHORIZATION [dbo]
From 'C:\Code\DBEmail.dll'
WITH PERMISSION_SET = External_Access
Наконец создайте sprocдля сопоставления с кодом CLR, выполнив это
CREATE PROCEDURE [dbo].[usp_DBEmail]
@Sender [nvarchar](255),
@SendTo [nvarchar](255),
@Subject [nvarchar](255),
@Body [nvarchar](max),
@mailserver [nvarchar](55)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [DBEmail].[StoredProcedures].[DBEmail]
Затем вы можете просто обернуть код внутри запланированных sprocs в Try Catch и, если произойдет ошибка, отправить себе сообщение об ошибке в электронном письме, как это.
BEGIN TRY
--Your SQL Stuff
END TRY
BEGIN CATCH
Declare @error as nvarchar(max);
SELECT @error = ERROR_NUMBER();
Exec usp_DBEmail @Sender='sender@xyz.com', @SendTo='you@xyz.com', @subject='Whoops', @Body=@error, @mailserver='smtp_ip'
END CATCH;
Надеюсь, это полезно!