使用sp_send_dbmail,更改通过电子邮件发送的结果中的字体/大小?

时间:2016-12-13 17:24:53

标签: sql-server sql-server-2008 sql-server-2008-r2

我有这个简单的查询,它发送一封包含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格式的情况下才能这样做。

感谢。

2 个答案:

答案 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格式输出版本。对不起,除非你去寻求一些自定义解决方案,否则就是这样。