• Embed Doc
  • Readcast
  • Collections
  • CommentGo Back
Download
 
Enviar correo electrónico en un formato tabular utilizando el correoelectrónico de la base datosSQL Server
Problema
Algunos de nuestros servidores SQL Server contienen tablas con datos resumidos(pudiendo ser un semanal / mensual / trimestral). Anteriormente, esta información fueenviada por correo electrónico como un archivo adjunto plano para los receptores.Se mepidió que convertir esto de tal manera que el propio correo electrónico contenga los datos dela tabla.De esta manera los usuarios serían capaces de ver los datos en un formato tabular, por loque es más fácil para mejorar la legibilidad. Por lo tanto llegamos a la cuestión de cómo enviarcorreo electrónico desde SQL Server con datos en un formato tabular.
S
olución
En primer lugar permítanme explicar el código utilizado en este consejo.Empiezo por lacreación de una tabla temporal y llenar con algunos datos de ejemplo, es una lista de losmejores jugadores de tenis junto a su rango, nombre, puntos de clasificación y el país.Esta tabla temporal sólo se utiliza en el ejemplo, en la vida real la tabla temporal no seríanecesaria, en lugar ella se utilizaría la tabla de base de datos real que contiene los datos.La siguiente sección es responsable de convertir los datos de tabla que hemos creado enuna variable local <<@xml>>. En la instrucción de selección, cada una de las columnas serviráncomo los encabezados de las tabla y las filas de datos de la tabla actuara como las filas en elcorreo electrónico.En la otra variable local <<@body>> se añaden las etiquetas HTML necesarias y el textoque se muestra en el correo electrónico, en este caso "Tenis Ranking Info".A continuación, incluimos los títulos de las columnas de la tabla en el interior del correoelectrónico. Recuerde que estos encabezados de tabla (los nombres de columna) se puedencambiar según su conveniencia.En el código de ejemplo, los nombres de columna de la tabla temporal se han utilizadocomo encabezados de tabla. Si se desea mostrar "jugador" en vez de "Nombre del jugador", sepuede hacer que al cambiar la etiqueta a la cabecera de la tabla <th>Jugador</ th>.Por último, el cierre de las etiquetas HTML se agregó.Una vez que el HTML se haformateado me envíe el correo electrónico mediante el procedimientoalmacenado<<sp_send_dbmail>>el cual se encuentra en la base de datos <<msdb>> yfinalmente se elimina la tabla temporal.Para usar el código de abajo, con su base de datos, tendrás que reemplazar el nombre dela tabla y la columna de la tabla siempre que sea necesario.Además, tendrás que cambiar el nombre del perfil de correo y la dirección de correoelectrónico que deseas utilizar.
 
Aquí está el código de ejemplo.
CREATETABLE#temp( [Clasificación] [int],[Nombre del Jugador] [varchar](128), [Puntos Clasificación] [int],[País] [varchar](128) )INSERTINTO#tempSELECT1,'Rafael Nadal',12390,'España' UNION ALLSELECT2,'Roger Federer',7965,'Suiza' UNION ALLSELECT3,'Novak Djokovic',7880,'Serbia' DECLARE@xmlnvarchar(max) DECLARE@bodynvarchar(max) SET@xml=CAST((SELECT[Clasificación]as'td','',[Nombre del Jugador]as'td','', [Puntos Clasificación]as'td','',[País]AS'td' FROM#tempORDERBY[Clasificación] FORXMLPATH('tr'),ELEMENTS)ASNVARCHAR(MAX)) SET@body='<html><body><H3> Tenis Ranking información </ h3> frontera <table = 1><tr><th> Rank </ th><th> Nombre del jugador </ th><th> puntos en elranking </ th><th> País </ th></ tr> ' SET@body=@body+@xml+'</ table></ body></ HTML>' EXECmsdb.dbo.sp_send_dbmail @Profile_name='SQL ALERTA',--aquí habilitas el perfil de correo @Body=cuerpo, @Body_format='HTML', @Recipients='zegnhabi@hotmail.com',--cambias el correo por los que desees@Subject='correo electrónico en formato tabular'DROPTABLE#Temp
La salida HTML del ejemplo anterior es el siguiente:
<html><body><H3> Tenis Ranking información </ h3> frontera<tableborder= 1><tr><th> Rank </ th><th> Nombre del jugador </ th><th>puntos en el ranking </ th><th> País </ th></tr><tr><td>1</td><td>RafaelNadal</td><td>12390</td><td>España</td></tr><tr><td>2</td><td>RogerFederer</td><td>7965</td><td>Suiza</td></tr><tr><td>3</td><td>NovakDjokovic</td><td>7880</td><td>Serbia</td></tr></ table></ body></html>
of 00

Leave a Comment

You must be to leave a comment.
Submit
Characters: ...
You must be to leave a comment.
Submit
Characters: ...