[英]how to use sp_send_dbmail to send table - sql server
I want to use sp_send_dbmail to send table.我想使用 sp_send_dbmail 发送表。
i did that:我这样做了:
create PROCEDURE [dbo].[sp_ABC]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@MailSubject nvarchar(500),
@dataTable nvarchar(max),
@HTMLcontent nvarchar(max),
@query nvarchar(max)
select *
into #T1
from my_table
SET @MailSubject = N'aaa'
SET @HTMLcontent = @HTMLcontent + @dataTable + '</Table>'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AAA',
@body_format = 'HTML',
@recipients = 'ABC@gmail.com',
@body = @HTMLcontent,
@subject = @MailSubject
Drop table #T1
END
but i didn't get any mail.但我没有收到任何邮件。
My question is how do I put the table I pulled into the email body?我的问题是如何将我拉到的桌子放入 email 主体中?
Procedure only to create a HTML table:仅创建 HTML 表的过程:
CREATE PROCEDURE [dbo].[PRC_HTML_TABLE] (@TABLE AS NVARCHAR(MAX)=NULL OUTPUT) AS BEGIN
IF @TABLE IS NULL BEGIN
PRINT 'Create a HTML code from a table to send in mail' --Vathaire 29/07/2019
RETURN
END
IF LEFT(@TABLE, 1) != '#' BEGIN
PRINT 'Use the parameter @TABLE as the name of your table (from Tempdb) and with OUTPUT, it will return the HTML'
PRINT 'ENVIE O @TABLE COMO O NOME DA SUA TABELA (EM TEMPDB) E COM OUTPUT, IRÁ RETORNAR O HTML'
RETURN
END
DECLARE @TEMPDBDBOTABLE AS NVARCHAR(MAX) = 'TEMPDB.DBO.' + @TABLE
EXEC MF_DROP #FULLXML
CREATE TABLE #FULLXML (X NVARCHAR(MAX))
DECLARE @COLS VARCHAR(MAX) = STUFF(
(SELECT ',"' + NAME + '" = ISNULL(CONVERT(NVARCHAR(MAX), ' + NAME + '), '''')'
FROM TEMPDB.sys.columns
WHERE OBJECT_ID = OBJECT_ID(@TEMPDBDBOTABLE) FOR XML PATH('')), 1, 1, '') --ISNULL needed so it dont break the table Vathaire 06/09/2019
INSERT INTO #FULLXML
EXEC('SELECT (SELECT ' + @COLS
+ ' FROM ' + @TABLE + ' FOR XML PATH(''tr''))')
SET @COLS = STUFF((SELECT ',' + NAME FROM TEMPDB.sys.columns WHERE OBJECT_ID = OBJECT_ID(@TEMPDBDBOTABLE) FOR XML PATH('')), 1, 1, '')
DECLARE @COL AS VARCHAR(MAX)
, @E AS NVARCHAR(MAX) = '</tr></thead><tbody>' + (SELECT * FROM #FULLXML) + '</tbody></table>'
, @H AS NVARCHAR(MAX) = '<table border=1><thead><tr>'
WHILE @COLS IS NOT NULL BEGIN
EXEC MF_SPLIT @COLS OUTPUT, @COL OUTPUT
SELECT
@H = @H + '<th>' + @COL + '</th>'
, @E = REPLACE(REPLACE(@E, '<' + @COL + '>', '<td>'), '</' + @COL + '>', '</td>')
END
SET @TABLE = @H + @E
END
within this process: MF_SPLIT code在这个过程中: MF_SPLIT代码
Example:例子:
--> Create a temp table
SELECT TOP 10 *
INTO #TEMP
FROM SYS.all_objects
--> Declare a variable using the name of the table
DECLARE @MAILBODY VARCHAR(MAX) = '#TEMP'
--> Call the procedure with OUTPUT
EXEC PRC_HTML_TABLE @MAILBODY OUT
SET @MAILBODY = 'Dears,<BR><BR>This is the result:<BR><BR>' + @MAILBODY + '<BR><BR>'
EXEC MSDB..sp_send_dbmail
'[profile_name]'
,'[recipients]'
,@BODY=@MAILBODY
,@BODY_FORMAT='HTML' --> Important
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.