【问题标题】:Send database email based on "if body content true send / false don't send"根据“如果正文内容真发送/假不发送”发送数据库电子邮件
【发布时间】:2016-04-08 19:53:16
【问题描述】:

我想根据“如果正文内容真发送/假不发送”发送电子邮件 如果没有返回的东西不发送,则不一定是如果有返回的东西发送。 我的代码基于来自 https://dba.stackexchange.com/questions/83776/need-to-send-a-formatted-html-email-via-database-mail-in-sql-server-2008-r2

的帖子

如果您发现此代码有点混乱,则问题所有者在上述链接中接受为最佳答案。 使用 MS SQL Server 2014

SET @Body = ( SELECT    td = CONVERT(VARCHAR(10), P.Date, 120), '',
                    td = P.ID, '',
                    td = P.ID2, '',
                    td = G.ID, '',
                    td = D.ID,'',
                    td = D.Name,'',
                    td = CASE WHEN G.SubmittedDate IS NULL THEN 'New'
                              ELSE 'Dealer Submitted'
                         END, ''
          FROM      I_CancelledGRN I
                    INNER JOIN TxnGRN G ON G.ID = I.ID
                    INNER JOIN Distributor D ON D.UID = G.DistributorUID
                    INNER JOIN POTxn P ON P.SiteUID = G.POTxn_SiteUID
                                          AND P.UID = G.POTxnUID
          WHERE IsCancelled IS NULL
        FOR   XML RAW('tr'),
              ELEMENTS
        )




SELECT  @Body = @TableHead + ISNULL(@Body, '') + @TableTail

EXEC sp_send_dbmail 
      @profile_name='DatabaseEmailProfile',
      @copy_recipients ='aasc@stackexchange.com',
      @recipients='aa.sc@outlook.com'
      @subject='Query Result',
      @body=@Body ,
      @body_format = 'HTML' ;

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    这样的东西对你有用吗?

    SET @Body = ( SELECT    td = CONVERT(VARCHAR(10), P.Date, 120), '',
                        td = P.ID, '',
                        td = P.ID2, '',
                        td = G.ID, '',
                        td = D.ID,'',
                        td = D.Name,'',
                        td = CASE WHEN G.SubmittedDate IS NULL THEN 'New'
                                  ELSE 'Dealer Submitted'
                             END, ''
              FROM      I_CancelledGRN I
                        INNER JOIN TxnGRN G ON G.ID = I.ID
                        INNER JOIN Distributor D ON D.UID = G.DistributorUID
                        INNER JOIN POTxn P ON P.SiteUID = G.POTxn_SiteUID
                                              AND P.UID = G.POTxnUID
              WHERE IsCancelled IS NULL
            FOR   XML RAW('tr'),
                  ELEMENTS
            )
    
    
    IF LEN(@Body) > 0
    BEGIN
    
    SELECT  @Body = @TableHead + ISNULL(@Body, '') + @TableTail
    
    EXEC sp_send_dbmail 
          @profile_name='DatabaseEmailProfile',
          @copy_recipients ='aasc@stackexchange.com',
          @recipients='aa.sc@outlook.com'
          @subject='Query Result',
          @body=@Body ,
          @body_format = 'HTML' ;
    
    END
    

    它只是检查天气@Body 是否有任何长度,如果有则只发送邮件。根据您的情况,您可以使用任何其他评估来代替 LEN

    【讨论】:

    • 信不信由你,这正是我最终想出的,不仅仅是说它在正确设置 html 格式时遇到了更多麻烦 :-( 但现在有效,非常感谢您的回复: -)
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2015-04-19
    • 2023-03-24
    • 1970-01-01
    • 2014-11-15
    • 2021-12-19
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多