Volvemos con otro Video Blog y hoy vamos a ver un caso de uso gracioso para nuestro servidor SQL Server. Usando DBMail vamos a automatizar un envío diario de correos electrónicos. Tendremos una tabla con los contactos y otras columnas para poder aplicar filtros y decidir cuando enviar o no los correos electrónicos.
La semana pasada me encontré en LinkedIn un usuario que compartía un script para enviar diariamente un correo electrónico a su pareja diciéndole «te quiero» gracias al uso de DBMail y de Jobs de SQL Server. A raíz de ese post, y siguiendo la broma, comenté que sería posible iterar por una tabla de contactos para automatizar este mismo envío pero personalizado para tantos contactos como tengas en tu tabla maestro.
Mi colega Rubén, lector recurrente del blog (que ya me conoce y sabe que detesto los cursores dado su mal rendimiento), me preguntó como hacer el proceso sin depender de bucles. Así que, para Rubén en especial y para todos vosotros en general, aquí lo tenéis. Mi video blog más canalla hasta la fecha. Os recomiendo verlo a pantalla completa para poder leer bien el código. Espero que os guste.
Os comparto ahora los scripts que hemos visto en el video
Cursor:
Declare @email nvarchar(128)
Declare @name nvarchar(128)
DECLARE email_cursor CURSOR FOR
SELECT Nombre, Mail
FROM contactos
WHERE activo = 1
OPEN email_cursor
FETCH NEXT FROM email_cursor
INTO @name,@email
WHILE @@FETCH_STATUS = 0
BEGIN
Declare @subject nvarchar(255)
Declare @Bodytext nvarchar(512)
Set @BodyText = 'Te quiero más que a nadie ' + @name + '. Quiero que sepas que eres la única en mi vida'
Set @Subject = 'Love You'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DB_Mail',
@recipients = @email,
@body = @Bodytext,
@subject = @subject;
FETCH NEXT FROM email_cursor
INTO @name,@email
END
CLOSE email_cursor
Consulta con SQL dinámico:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + N'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = ''DB_Mail'',
@recipients = ''' + mail + ''',
@body = ''Te quiero más que a nadie ' + nombre + '. Quiero que sepas que eres la única en mi vida'',
@subject = ''Love You''; '
FROM contactos
WHERE activo = 1;
--PRINT @sql;
EXEC sp_executesql @sql;
Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

