msdb.dbo.sp_send_dbmail 中的动态参数传输

问题描述

我在通过 sql Server 发送电子邮件时遇到问题。我需要计算运行年度前几个月的分钟数。 问题是电子邮件应该每个月发送一次,并且应该是动态确定的(4 月应该是 1 月、2 月、3 月)。以三月为例,一月和二月。 所有这些都应该是表格形式。 我能够制作一个工作版本,但它不是动态的。

DECLARE
        
        @Message_Body  NVARCHAR(MAX),@subject VARCHAR(255),@recipients VARCHAR(MAX),@copy_recipients VARCHAR(MAX);
        


    SELECT
        @subject = 'Monthly Report',@recipients = 'test@email.com',@copy_recipients = 'test@email.com'

    SELECT
        @Message_Body =
        N'<H2 STYLE="COLOR:BLACK">'+'Monthly Report'+ '</H2>' +
        N'<table border="1">' +
        N'<tr style="background-color: #DCDCDC; color: #000000"><th>User</th>'+
+'<th>'+(SELECT (DATENAME (month,DATEADD(M,-2,getdate()))+' ('+CAST(DATEPART(YEAR,getdate())) AS VARCHAR(MAX))))+')</th>'
+'<th>'+(SELECT (DATENAME (month,-1,getdate())) AS VARCHAR(MAX))))+')</th>'
+N'<th>Total</th>'
+       CAST ( (
            
        SELECT ISNULL([User],'UNKNowN') as td,'',replace(replace(convert(varchar(20),cast(ISNULL([2],0)/60 as money),1),','),'.00','') as [td],cast(ISNULL([1],''
FROM (
    SELECT SUM(Duration) as Duration,[Months],'Total Minutes' as [User]
    FROM Table_Test 
    GROUP BY [Months]
    ) AS SourceTable
PIVOT(SUM(Duration) FOR [Months] IN ([1],[2],[3],[4],[5],[6],[7],[8])) AS Pivottable
                FOR XML PATH('tr'),TYPE 
        ) AS NVARCHAR(MAX) ) +
        N'</table>'+
        N'<H2 STYLE="COLOR:BLACK">Thanks</H2>';




        print @Message_Body

    EXEC msdb.dbo.sp_send_dbmail  
        @recipients = @recipients,@copy_recipients = @copy_recipients,@subject = @subject,@body = @Message_Body,@body_format = 'HTML'
END

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...