Existen varias formas de solucionar esto: con un servicio de Windows a modo de tarea "cron" (pero necesarias un servidor que estuviera siempre encendido y desconozco tu infraestructura o bien haciendo uso de las tareas programadas y el envío de mail desde el propio SQL Server .
Paso 1: Configurando Sql Server 2008 para envío de correo:
Esto es muy sencillo y lo puedes hacer desde un asistente paso a paso.
Aquí tienes un enlace dónde viene todo explicado hasta el final y con imágenes:
http://geeks.ms/blogs/rcarreras/archive/2009/09/16/configurando-sql-server-2008-para-enviar-emails-paso-a-paso.aspx
Paso 2: Escribimos una consulta TSQL para enviar el correo:
¿En caso de que un producto esté a punto de vencer necesitamos que se envíe un correo no? Pues para ello escribimos una consulta TSQL similar a esta:
-- Declaramos las variables que necesitamos
DECLARE @productId int
-- Obtenemos los IDs de los productos a 10 días de vencimiento y lo guardamos en un cursor para iterar después
DECLARE cursorProducto CURSOR FOR
SELECT Id FROM Productos WHERE DATEDIFF(days, GetDate(), FechaVencimiento) <= 10
OPEN cursorProducto
FETCH NEXT FROM cursorProducto INTO @productId
-- Recorremos cada Id de Producto y enviamos un mail
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_send_dbmail @profile_name='ElNombreDelPerfilDeCorreoCreadoEnPaso1',
@recipients= '[email protected]',
@subject= 'Producto ' + @productId + ' próximo a vencimiento' ,
@body= 'Cuerpo del mensaje... si necesitamos mostrar más info del producto aquí deberías hacer una nueva SELECT dentro del bucle para obtener los datos de @productId'
FETCH NEXT FROM cursorProducto
INTO @productId
END
CLOSE cursorProducto
DEALLOCATE cursorProducto
Revisa el código que puede que me haya bailado algo pero basicamente esta consulta lo que debe hacer es envíar un correo por cada producto que FechaVencimiento sea menor a 10 días desde hoy.
Paso 3: Crear una tarea programada:
Para que el sistema te avise cuando un producto esté a punto de vencer creamos una tarea programada en Sql Server que ejecuta, ¿cada día? Esta consulta.
Esto también se hace desde un asistente en Sql Server sin mucha complicación.
Este link lo explica paso a paso (aunque es del 2005 no ha cambiado mucho en la versión 2008):
http://www.danielcostas.com/tareas-programadas-en-sql-server-2005/
Fíjate como el está creando una tarea para ejecutar una TSQL de copia de seguridad. Nosotros pondremos la consulta que hemos creado en el Paso 2 y la programaremos para que se ejecute con la cadencia deseada.
Espero que haya quedad más o menos claro. Para cualquier cosa vuelves a preguntarme.