记 Sqlserver 拼接大量数据为HTML TABLE发送邮件

由于拼接量过大,大概3万条数据,使用 XML PATH(‘tr’) 会中断,每次拼接到一千多行就断了,使用多个nvarchar (max)变量相加也无法解决。

有想过直接生成Excel以附件形式发送邮件,毕竟几万行的表格放在邮件里也是相当炸裂的,但是提议被否决,只能老实干下去。

后面看到用实体表 UpdateText的模式,就尝试了下,结果成功了。
参考:https://www.cnblogs.com/ilrc/p/5193166.html
这是表结构:
在这里插入图片描述

下面是拼接的sql:

TRUNCATE TABLE CONCAT_EmailBodytb --每次清空这个拼接的实体表

declare @Html varchar (max),@TableTr varchar (max), @i int,@rowcount int,@ptrval binary(16)
set @i=1
select @rowcount=count(*) from #SendEmailDatatb --获取要发送邮件的数据行数

IF @rowcount>0
BEGIN
 set @Html =N'<html><head></head><body><h3>Dear All:</h3><h3> 以下为XXXXXXXXXX(共'+convert(varchar(10), @rowcount)+'项),请查收: </h3></br><h3>此邮件为系统发送,请勿回复!</h3><br/><table  border="1"  cellspacing="0"><thead><tr><th>序号</th><th>列1</th><th>列2</th></tr>   </thead><tbody>' 
INSERT INTO CONCAT_EmailBodytb (EmailBody)VALUES(@Html)--拼接邮件内容第一步
while @i<=@rowcount
begin

SELECT  @TableTr ='<tr><td>'+convert(varchar(10), ID)+'</td><td>'+COL1+'</td><td>'+COL2+'</td></tr>' from #SendEmailDatatb where ID=@i   --ID是自定义的列ROW_NUMBER()

--循环拼接每一行
SELECT @ptrval = TEXTPTR(EmailBody) from CONCAT_EmailBodytb 
UPDATETEXT CONCAT_EmailBodytb.EmailBody @ptrval NULL 0  @TableTr

set @i=@i+1
end 
--拼接内容结束
SELECT @ptrval = TEXTPTR(EmailBody) from CONCAT_EmailBodytb 
UPDATETEXT CONCAT_EmailBodytb.EmailBody @ptrval NULL 0  '</tbody></table></body></html>';

--获取拼接好的邮件内容
SELECT  EmailBody FROM CONCAT_EmailBodytb WHERE id=1


END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值