用户要求发送邮件预警,仔细看了一下sp_send_dbmail的文档和SQL for XML语法,再google一番。发现关键是格式化结果集,构造成HTML的Table
用户要求发送邮件预警,仔细看了一下sp_send_dbmail的文档和SQL for XML语法,再google一番。发现关键是格式化结果集,构造成HTML的Table,代码如下:
Code
1 DECLARE @html NVARCHAR(MAX)
2 SET @html = '<style type=''text/css''>.header {text-align:center;font-weight:bold;white-space:nowrap;color:#7f7e82;} .cell_text {vertical-align:top;text-align:left;color:#333333;} .cell_num {vertical-align:top;text-align:right;color:#333333;}</style>' ;
3 SET @html = @html + CAST(( SELECT 3 [@cellpadding],
4 0 [@cellspacing],
5 'font-family:verdana;font-size:10px;' [@style],
6 1 [@border],
7 --returns the header
8 ( SELECT [@class] = 'header', 'Database Table' [text()] FOR XML PATH('th'), TYPE) tr,
9 ( SELECT [@class] = 'header', 'Entity Count' [text()] FOR XML PATH('th'), TYPE) tr,
10 ( SELECT [@class] = 'header', 'Total Rows' [text()] FOR XML PATH('th'), TYPE ) tr,
11 -- returns the rows in the table
12 ( SELECT ( SELECT [@class] = 'cell_text', dbtable [text()] FOR XML PATH('td'), TYPE ),
13 ( SELECT [@class] = 'cell_text', entities [text()] FOR XML PATH('td'), TYPE ),
14 ( SELECT [@class] = 'cell_num', rows [text()] FOR XML PATH('td'), TYPE )
15 FROM ( SELECT TOP 3 dbtable = OBJECT_NAME(object_id), entities = COUNT(DISTINCT name), rows = COUNT(*)
16 FROM sys.columns
17 GROUP BY OBJECT_NAME(object_id)
18 ) data
19 FOR XML PATH('tr'), TYPE
20 )
21 FOR XML PATH('table'), TYPE
22 ) AS VARCHAR(MAX))
23 SELECT @html ;
1 DECLARE @html NVARCHAR(MAX)
2 SET @html = '<style type=''text/css''>.header {text-align:center;font-weight:bold;white-space:nowrap;color:#7f7e82;} .cell_text {vertical-align:top;text-align:left;color:#333333;} .cell_num {vertical-align:top;text-align:right;color:#333333;}</style>' ;
3 SET @html = @html + CAST(( SELECT 3 [@cellpadding],
4 0 [@cellspacing],
5 'font-family:verdana;font-size:10px;' [@style],
6 1 [@border],
7 --returns the header
8 ( SELECT [@class] = 'header', 'Database Table' [text()] FOR XML PATH('th'), TYPE) tr,
9 ( SELECT [@class] = 'header', 'Entity Count' [text()] FOR XML PATH('th'), TYPE) tr,
10 ( SELECT [@class] = 'header', 'Total Rows' [text()] FOR XML PATH('th'), TYPE ) tr,
11 -- returns the rows in the table
12 ( SELECT ( SELECT [@class] = 'cell_text', dbtable [text()] FOR XML PATH('td'), TYPE ),
13 ( SELECT [@class] = 'cell_text', entities [text()] FOR XML PATH('td'), TYPE ),
14 ( SELECT [@class] = 'cell_num', rows [text()] FOR XML PATH('td'), TYPE )
15 FROM ( SELECT TOP 3 dbtable = OBJECT_NAME(object_id), entities = COUNT(DISTINCT name), rows = COUNT(*)
16 FROM sys.columns
17 GROUP BY OBJECT_NAME(object_id)
18 ) data
19 FOR XML PATH('tr'), TYPE
20 )
21 FOR XML PATH('table'), TYPE
22 ) AS VARCHAR(MAX))
23 SELECT @html ;