【问题标题】:SQL Server 2008 R2 - sp_send_dbmailSQL Server 2008 R2 - sp_send_dbmail
【发布时间】:2019-03-16 13:18:13
【问题描述】:

一开始我标记 - 我不是编写代码的专家。我需要你的帮助。我想通过 sp_send_dbmail 实现一个电子邮件通知系统。

代码:

USE msdb
go

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

EXEC sp_send_dbmail @profile_name='PROFILENAME',
    @recipients='myemail@email.com',
    @query_result_header=0,
    @attach_query_result_as_file=0,
    @query="select Kod,Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE '%?%' and (AsId=205 or AsId=304 or AsId=289 or AsId=321 or AsId=306 or AsId=217 or AsId=261) and Aktywny=1 ORDER BY Kod",
    @body_format="text",
    @subject='SUBCJECT'
GO

SQL 查询有效并发送电子邮件,但也发送空行。例如。如何摆脱它们?

1916                 SER TWAROGOWY WIEJSKI LUZ                                                                                                                                                                                                                  

我还希望 sp_send_dbmail 仅在查询返回数据时发送电子邮件。如果没有数据 - 不发送消息。

【问题讨论】:

  • 什么是“空行”?您的示例不显示空行。如果您希望发送是有条件的,那么您需要在通话前提供if
  • 附带说明,我建议您使用SET QUOTED_IDENTIFIER ON 并将文字括在ANSI/ISO 标准单引号中,在字符串中使用双引号。
  • 这是电子邮件。数据之间有空行。我更喜欢让信息看起来更清晰。链接:drive.google.com/file/d/1MZvgEiF_t4H-7vbHGrYAczPEfiayTAiG/…

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


【解决方案1】:

我认为你需要IF,如果你想要一个有条件的电子邮件:

IF EXISTS (select Kod, Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE '%?%' and AsId IN (205, 304, 289, 321, 306, 217, 261) and Aktywny = 1)
BEGIN
    EXEC sp_send_dbmail @profile_name='PROFILENAME',
        @recipients='myemail@email.com',
        @query_result_header=0,
        @attach_query_result_as_file=0,
        @query='select Kod, Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE ''%?%'' and AsId IN (205, 304, 289, 321, 306, 217, 261) and Aktywny=1 ORDER BY Kod',
        @body_format='text',
        @subject='SUBCJECT';
END;

GO

【讨论】:

  • 这个“空行”是回车。 CHR(10)CHR(13)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2013-02-07
  • 2011-06-19
  • 2012-10-05
  • 1970-01-01
相关资源
最近更新 更多