【问题标题】:EXEC msdb.dbo.sp_send_dbmail ignored QueryEXEC msdb.dbo.sp_send_dbmail 忽略查询
【发布时间】:2019-04-30 08:51:22
【问题描述】:

我有一个向客户发送生日电子邮件的代码,查询工作正常,但 SQL 邮件服务器总是向所有客户发送生日电子邮件,即使他没有生日

use Insurance
go


select 
  Customer.CustomerID
  ,Customer.FirstName
  ,Customer.LastName
  ,Customer.Birthday
  ,Customer.Email

from Customer
where Customer.CustomerID = Customer.CustomerID and 
                DAY([Birthday]) = DAY(GETDATE())
                AND MONTH([Birthday]) = MONTH(GETDATE())

declare @Receipientlist nvarchar(4000)

set @Receipientlist =
      STUFF((select ';' + Email FROM dbo.Customer FOR XML PATH('')),1,1,'')



EXEC msdb.dbo.sp_send_dbmail @profile_name='test',
    @recipients=@Receipientlist,
    @subject='Insurance',
    @body='Happy Birthday.
      Today is your Birthday.'

【问题讨论】:

    标签: sql-server tsql sp-send-dbmail


    【解决方案1】:

    批处理顶部的查询与执行msdb.dbo.sp_send_dbmail 的语句无关。如果您只想通过电子邮件发送客户的生日,则需要在创建收件人的语句中进行过滤(并且您不需要之前的语句):

    DECLARE @RecipientList nvarchar(4000);
    
    --I removed the CustomerID = CustomerID clause, as it'll always equal itself,
    --apart from when it's value is NULL (and I doubt it'll ever be NULL)
    SET @RecipientList = STUFF((SELECT N';' + Email
                                 FROM dbo.Customer
                                 WHERE DAY([Birthday]) = DAY(GETDATE())
                                   AND MONTH([Birthday]) = MONTH(GETDATE())
                                 FOR XML PATH(N''),TYPE).value('.','nvarchar(4000)'), 1, 1,N'');
    
    EXEC msdb.dbo.sp_send_dbmail @profile_name = 'test',
                                 @recipients = @RecipientList,
                                 @subject = 'Insurance',
                                 @body = 'Happy Birthday.
                Today is your Birthday.';
    

    我还更改了返回子查询值的方式,使用了TYPEvalue 子句。电子邮件地址可以包含一些特殊字符,如果不使用 TYPE,这些字符将被转义(例如,& 将变为 &)。 (我还更正了@RecipientList 的拼写。)

    【讨论】:

    • 如果我实现此代码,我在 @RecipientList ';' 附近有错误的语法。
    • 我少了一个括号。 @吉米。我没有对此进行测试,因为我没有任何样本数据。已修复(但您也应该能够调试这样的简单问题 :))
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2011-02-12
    • 2020-05-26
    • 2017-08-03
    • 2013-04-13
    • 2015-05-13
    • 2015-11-28
    • 2013-09-04
    相关资源
    最近更新 更多