【问题标题】:Format query output into an html table将查询输出格式化为 html 表
【发布时间】:2019-03-19 13:08:49
【问题描述】:

我需要通过电子邮件发送的 sql 查询结果为可读形式。对 html 的更改将允许在表中创建结果。我需要帮助在下面的代码中实现 html。

USE msdb
go

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

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='PROFILE',
        @recipients='myadres@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='warning';
END;

GO

'MgSam'帖子Convert a SQL query result table to an HTML table for email中包含的示例实际上解决了转换为html并创建表的问题。但是,我不知道如何实现“if”条件。

根据 MgSam 指南 - 以下代码有效 - 但如果查询未返回数据 - 将发送电子邮件。

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

DECLARE @html nvarchar(MAX);

EXEC spQueryToHtmlTable @html = @html OUTPUT,  @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", @orderBy = N'ORDER BY Kod';

EXEC msdb.dbo.sp_send_dbmail
    @profile_name='PROFILE',
    @recipients='my@email.com',
    @subject = 'WARNING',
    @body = @html,
    @body_format = 'HTML',
    @query_no_truncate = 1,
    @attach_query_result_as_file = 0;

【问题讨论】:

标签: html sql sp-send-dbmail


【解决方案1】:

好吧,SQL Server 中的 IF 语句非常简单,请看这里: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql

根据您的示例:

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

DECLARE @html nvarchar(MAX);

EXEC spQueryToHtmlTable @html = @html OUTPUT,  @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", @orderBy = N'ORDER BY Kod';

IF DATALENGTH(@html) > 0 
  EXEC msdb.dbo.sp_send_dbmail
    @profile_name='PROFILE',
    @recipients='my@email.com',
    @subject = 'WARNING',
    @body = @html,
    @body_format = 'HTML',
    @query_no_truncate = 1,
    @attach_query_result_as_file = 0;
ELSE PRINT 'No results, don't email';

【讨论】:

  • 注意:如果转换为表会为空结果集注入某些包装器,您可能需要调整“>0”限制——我没有检查底层存储过程。例如。如果@html 导致“ ”没有数据
【解决方案2】:

我使用了如果存在。有效的代码。

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

DECLARE @html nvarchar(MAX);

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 spQueryToHtmlTable @html = @html OUTPUT,  @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", @orderBy = N'ORDER BY Kod';

 EXEC msdb.dbo.sp_send_dbmail
    @profile_name='PROFILE',
    @recipients='my@email.com',
    @subject = 'WARNING',
    @body = @html,
    @body_format = 'HTML',
    @query_no_truncate = 1,
    @attach_query_result_as_file = 0;
    END;

GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2023-01-28
    • 2014-02-03
    相关资源
    最近更新 更多