工作中经常需要用SQLServer发送报警或者业务报表邮件,每次现拼串也不是办法,故写了一个TableResult to HTML的存储过程

USE master;
GO
-- Description: Turns a table result into a formatted HTML table. Useful for emails.
-- Any ORDER BY clause needs to be passed in the separate ORDER BY parameter.
-- Author:zhangchuan
-- Date: 20180611
-- ====================How to use========================= CREATE PROC [dbo].[sp_TableToHtml]
(
@temptb nvarchar(MAX), --A temporary table to turn into HTML format. It should be begin with "#".
@orderBy nvarchar(MAX) = NULL, --An optional ORDER BY clause. It should contain the words 'ORDER BY'.
@html nvarchar(MAX) = NULL OUTPUT --The HTML output of the procedure.
)
AS
BEGIN
SET NOCOUNT ON;
IF @orderBy IS NULL SET @orderBy = '' ELSE SET @orderBy = REPLACE(@orderBy, '''', ''''''); DECLARE @ExecStr nvarchar(MAX)
SET @ExecStr='
SET @html =
N''<table border="1" style="font-size:12pt; font-family:verdana; text-align:right">'' +
N''<tr style="font-weight:bold">''
SET @html = @html + '
DECLARE @ColStr VARCHAR(MAX)
SELECT @ColStr=ISNULL(@ColStr+'<th>'+name+'</th>','<th>'+name+'</th>')
FROM tempdb.sys.columns
WHERE object_id=(SELECT TOP 1 object_id FROM tempdb.sys.tables WHERE name like '%'+@temptb+'%' ORDER BY create_date DESC) ORDER BY column_id SET @ExecStr=@ExecStr+'N'''+@ColStr+'''' SET @ExecStr=@ExecStr+'
SET @html = @html + N''</tr>''
'
DECLARE @RowStr VARCHAR(MAX)
SELECT @RowStr=ISNULL(@RowStr+' ,td = LTRIM(ISNULL(['+name+'],0)),''''',',td = LTRIM(ISNULL(['+name+'],0)),''''')+CHAR(13)
FROM tempdb.sys.columns
WHERE object_id=(SELECT TOP 1 object_id FROM tempdb.sys.tables WHERE name like '%'+@temptb+'%' ORDER BY create_date DESC) ORDER BY column_id SET @ExecStr = @ExecStr+' SET @html=@html+CAST(
(SELECT
'
+ STUFF(@RowStr,1,1,'')
+'
FROM '+@temptb+' '+@orderBy+'
FOR XML PATH(''tr''), TYPE
) AS NVARCHAR(MAX)
)
SET @html=replace(@html,''&lt;'',''<'')
SET @html=replace(@html,''&gt;'',''>'') SET @html=@html+N''</table>''+CHAR(13)
'
--PRINT @ExecStr
EXEC sys.sp_executesql @ExecStr, N'@html nvarchar(MAX) OUTPUT', @html=@html OUTPUT
END
GO

使用方法:

USE [master]
GO
IF OBJECT_ID('TEMPDB.DBO.#EndList') IS NOT NULL DROP TABLE #EndList --insert into temp table
SELECT TOP 10 *
INTO #EndList
FROM [DB_Monitor].[dbo].[T_dm_os_waiting_tasks] --Table to html
DECLARE @html nvarchar(MAX);
EXEC [sp_TableToHtml] @html = @html OUTPUT, @temptb = N'#EndList', @orderBy = N'ORDER BY 1'; --send the email
IF @html IS NOT NULL
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBA_Profile',
@recipients = 'zc_0101@163.com;',
--@blind_copy_recipients = 'zc_0101@163.com',
@subject = 'HTML email',
@body = @html,
@body_format = 'HTML'

效果图:

查询结果集转换成HTML存储过程的更多相关文章

  1. 使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理

    在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样     --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT ...

  2. hibernate查询部分字段转换成实体bean

    //hibernate查询部分字段转换成实体bean /** * 查询线路信息 */ @Override public List<Line> getSimpleLineListByTj(M ...

  3. mysql查询中字符串转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现例如:将pony表 ...

  4. hibernate sql查询后对象转换成实体类

    在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用  session.createSQLQuery(sql).setResultTransform ...

  5. 在sql脚本中将查询结果集拼接成字符串

  6. ASP查询数据RS转换成COMMAND

    RS版本: IF(troubleCatalog="1" or troubleCatalog="2" or troubleCatalog="3" ...

  7. 使用HIBERNATE的SQL查询并将结果集自动转换成POJO

    在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...

  8. 佩特来项目经验小集合(2)___组合查询存储过程,报错 &quot;varchar JBID=&#39;&#39; 转换成数据类型 int 时失败&quot;

       今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...

随机推荐

  1. Helloworld——SpringMVC

    搭建环境:eclipse 这里需要配置Server runtime environment——Apache Tomcat 到官网下载 解压 在eclipse中: Window perferences ...

  2. 中小学Python编程语言教学

    中小学Python编程语言教学 作为一名高中信息技术老师,被技术的发展潮流推动着,不断更新教学内容和方法,以适应快速发展的信息社会. 以前的中小学信息技术课程,老师们各显神通,身怀绝技,教PS,Fal ...

  3. 动态的加载显示oracle警告日志文件内容

    Last login: Fri Jan 25 00:37:47 2019 from oracle [root@oracle ~]# su - oracle [oracle@oracle ~]$ sql ...

  4. YARN配置

    环境搭建 mapred-site.xml <configuration> <property> <name>mapreduce.framework.name< ...

  5. Ubuntu 14.04 升级 nginx/1.8.1

    参考文档:https://segmentfault.com/a/1190000008116875 https://www.ilanni.com/?p=11788 先停止nginx服务 service ...

  6. apache http添加证书转成https

    使用yum安装的apache. 第一步,需要把准备好的证书上传到服务器.具体位置:/app/cacerts/ 第二步,安装ssl. 命令:yum install mod_ssl openssl 安装完 ...

  7. centos/redhat/ubuntu不同之处

    前言:最近用久了ubuntu,发现这个和centos还是有很大差别的,以下是我的个人总结: centos/redhat/ubuntu不同之处: 1.关系理解:centos和redhat,你可以理解为是 ...

  8. 设置Jexus开机启动

    一.如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:/lib/systemd/system/  ,服务以.service结尾 cd /lib/systemd/system/ ...

  9. How Classes are Found

    转载自: https://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html How Classes are Found ...

  10. Spring,Spring MVC及Spring Boot区别

    什么是Spring?它解决了什么问题? 我们说到Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代 ...