我有这个简单的查询,它发送一封包含SP结果的电子邮件:
USE msdb
EXEC sp_send_dbmail
@profile_name = 'Mail list',
@recipients = 'bob.jones@company.com',
@subject = 'query results',
@body = 'Result from SELECT appended below.',
@execute_query_database = 'DB',
@query = 'exec usp_DisplayData'
一切正常,但我希望文本更小,而不会丢失我使用固定宽度字体的列格式。这可能吗?
我正在考虑使用HTML,但我发现的建议似乎不适用于存储过程(我必须使用实际查询)。
此外,我想添加一个指向正文的链接(使用a href
)而不是发布真正长的网址,我想我只能在电子邮件是html格式的情况下才能这样做。
感谢。
答案 0 :(得分:1)
查询在单独的会话中运行,因此我怀疑应用于邮件正文的任何html格式都不会应用于数据集。但是,如果将body格式设置为html(而不是text),则可以更改存储过程以返回有效的html而不是原始数据。这是一个巨大的痛苦,因为你必须将所有数字和日期转换为字符串,但它可能:下面的示例。
更好的方法是创建SSRS报告并通过订阅发送出去。将输出格式设置为" MHTML(Web存档)"它将作为电子邮件正文嵌入。
DECLARE @body VARCHAR(MAX)
-- Set up CSS formatting for the email body:
SELECT @body =
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head> <title>Tolerance check on completed import</title>
<meta charset="UTF-8" />
<style type="text/css">
body {
margin-left:20px;
font-size: 70%;
font-family: Arial, Verdana, sans-serif;
}
table {
border-collapse:collapse;
border: none;
}'
--etc...
-- Start a table:
SELECT @body +=
'<h5>Import Information</h5>
<table style="margin-top: 0;">
<tr>
<th>ImportID</th>
<th>State - Config</th>
<th>Frequency</th>
<th>Imported</th>
</tr>'
-- Add detail rows to the table with a SELECT statement
SELECT DISTINCT @body +=
'<tr><td>' + CAST(t1.ID AS VARCHAR(10)) + '</td>
<td>' + t2.StateCode + ' - ' + CAST(t1.StateConfigID AS VARCHAR(10)) + '</td>
<td>' + @Freq + '</td>
<td>' + CONVERT(NVARCHAR, t1.CreateDate , 101) + '</td></tr>'
FROM dbo.Imp t1
JOIN Cfg t2
ON t1.CfgID = t2.ID
WHERE t1.ID = @ID
SELECT @body += '</table>'
RETURN @body
答案 1 :(得分:0)
您基本上需要将@query参数更改为:
@query = 'exec usp_DisplayData_HTML'
...然后编写usp_DisplayData proc的HTML格式输出版本。对不起,除非你去寻求一些自定义解决方案,否则就是这样。