Отправить данные по электронной почте в T-SQL - PullRequest
1 голос
/ 15 ноября 2010

Я пишу хранимую процедуру, которая собирает все изменения, которые произошли в таблице за определенную дату, и хотела бы отправить набор записей администратору по электронной почте из пакетного задания SQL.

Теперь до сих пор я не мог понять, как отправить набор записей в теле письма. Можно ли построить тело письма на основе набора записей, полученных из некоторой логики tsql.

Любая помощь оценивается

Спасибо

TheITGuy

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Просмотрите процедуру sp_send_dbmail , которая позволяет выполнить запрос и отправить результаты в теле сообщения электронной почты или в виде вложения файла.

0 голосов
/ 03 июня 2013

Фирма, в которой я работаю, требует, чтобы пара имя / значение была в отдельных строках, а не в таблице.В то время как мое решение могло использовать некоторую настройку, после большой работы я придумал решение с форматированием CSS.Однако я не могу понять, почему ширина столбца NAME не равна 100px, как я и просил.

Специальные символы: +0182, +0183 и +0185, соответственно.

Я буду продолжать стремиться к более элегантному решению без большого количества функций замены, но фирма больше озабочена решением «сейчас», чем элегантным.Буду признателен за отзывы / улучшения.

Письмо приходит (в Outlook) в формате, соответствующем нашей фирме:


Информация о теннисном рейтинге

Ранг:1
Имя игрока: Рафаэль Надаль
Очки: 12390
Страна: Испания

Ранг: 2
Имя игрока: Роджер Федерер
Очки: 7965
Страна: Швейцария

Ранг: 3
Имя игрока: Новак Джокович
Очки: 7880
Страна: Сербия


Вот мое решение:

    CREATE TABLE #Temp 
( 
  [Rank]  [int],
  [Player Name]  [varchar](128),
  [Ranking Points] [int],
  [Country]  [varchar](128)
)

INSERT INTO #Temp
SELECT 1,'Rafael Nadal',12390,'Spain'
UNION ALL
SELECT 2,'Roger Federer',7965,'Switzerland'
UNION ALL
SELECT 3,'Novak Djokovic',7880,'Serbia'

DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)

SET @xml = CAST(( SELECT '¶Rank:·º' + convert(varchar, [Rank]) AS 'br','','¶Player Name:·º' +[Player Name] AS 'br','',
      '¶Points:·º' + convert(varchar, [Ranking Points]) AS 'br','', '¶Country:·º' + Country AS 'br'
FROM  #Temp ORDER BY Rank 
FOR XML PATH('br'), ELEMENTS ) AS NVARCHAR(MAX))

SET @body ='<html><head><style type=''text/css''>body{font-family:tahoma;font-size:9pt;}.h{width:100px;}</style></head><body><H3>Tennis Rankings Info</H3>'    

SET @body = @body + @xml +'</body></html>'
set @body = replace(@body, '</br>', '<br />')
set @body = replace(@body, '<br><br>', '<p>')
set @body = replace(@body, '<br>', '')
set @body = replace(@body, '<br /><br />', '</p>')
set @body = replace(@body, '¶', '<span class=''h''>')
set @body = replace(@body, '·', '</span>')
set @body = replace(@body, 'º', '&nbsp;&nbsp;')

--select @body

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBMail', -- replace with your SQL Database Mail Profile 
@body = @body,
@body_format ='HTML',
@recipients = 'xxx@xxx.com', -- replace with your email address
@subject = 'E-mail in Tabular Format' ;

DROP TABLE #Temp
0 голосов
/ 13 февраля 2013

Это может дать вам некоторый импульс:

CREATE TABLE #Temp 
( 
  [Rank]  [int],
  [Player Name]  [varchar](128),
  [Ranking Points] [int],
  [Country]  [varchar](128)
)


INSERT INTO #Temp
SELECT 1,'Rafael Nadal',12390,'Spain'
UNION ALL
SELECT 2,'Roger Federer',7965,'Switzerland'
UNION ALL
SELECT 3,'Novak Djokovic',7880,'Serbia'


DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)


SET @xml = CAST(( SELECT [Rank] AS 'td','',[Player Name] AS 'td','',
       [Ranking Points] AS 'td','', Country AS 'td'
FROM  #Temp ORDER BY Rank 
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))


SET @body ='<html><body><H3>Tennis Rankings Info</H3>
<table border = 1> 
<tr>
<th> Rank </th> <th> Player Name </th> <th> Ranking Points </th> <th> Country </th></tr>'    


SET @body = @body + @xml +'</table></body></html>'


EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL ALERTING', -- replace with your SQL Database Mail Profile 
@body = @body,
@body_format ='HTML',
@recipients = 'bruhaspathy@hotmail.com', -- replace with your email address
@subject = 'E-mail in Tabular Format' ;


DROP TABLE #Temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...