【问题标题】:T-SQL - IF true then run sp_send_dbmail ELSE do nothing?T-SQL - 如果为真则运行 sp_send_dbmail 否则什么都不做?
【发布时间】:2020-03-12 16:00:48
【问题描述】:

我根据 Google 发布的帖子尝试了几种不同的方法。但我就是无法让它工作。 我正在运行一个 select 语句,并使用 sp_send_dbmail 将结果通过电子邮件发送给收件人。 这工作得很好。我想要完成的是,如果 select 语句返回 0 行,则不会发出任何电子邮件。 我尝试了很多东西,一个例子:

    Select Statement    --The select statement is at the top of the code
    IF @@rowcount = 0     -- followed by the IF statement
    begin
    return
    end
    ELSE
    begin
    exec msdb.dbo.sp_send_dbmail 
    end

运行上面的示例,我没有收到错误,但无论是 0 还是非 0,它都会发送电子邮件。

如果 select 语句返回零结果,我如何将 sp.send_dbmail 封装到 IF 语句中?

谢谢!

【问题讨论】:

  • "esex"? “sp.send_dbmail”?我假设您的意思是EXECsys.sp_send_dbmail。此外,BEGIN 应该跟随您的ELSE。这些看起来都像是印刷错误,因为上面肯定会给你错误。 esex 不是有效的关键字,我怀疑在您的数据库中的架构 sp 上有一个对象 send_dbmail
  • 是的 'exec' 和 msdb.dbo.sp_send_dbmail 。执行官是一个错字,其余的都是准确的,但工作没有错误。 else 之后有一个 begin。
  • 然后edit 你的问题。如果您在代码中包含您说“正在工作”的拼写错误,但显然不会,那么它很可能会因为排版错误而被否决或关闭。

标签: sql-server tsql if-statement rowcount sp-send-dbmail


【解决方案1】:

试试

IF EXISTS([Select Statement])
BEGIN
exec sp.send_dbmail
END

【讨论】:

  • 应该提供更多细节。这是没有 IF 语句的工作选择语句: ``` set @query=' SELECT table1.columnA , convert(date,table.column) as columnheader FROM table.column inner join table on table.column.column = table.column table.column = table.column 上的内部连接表其中 table.column 像 ''ABC'' 和前缀!= ''XYZ'' 和 dateadd(day,+30,getdate()) 和 dateadd(day,+ 31,getdate()) 按日期排序'```
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多