【问题标题】:Query to convert query to HTML and send via email查询将查询转换为 HTML 并通过电子邮件发送
【发布时间】:2018-09-03 05:14:55
【问题描述】:

我使用存储过程将 SQL 查询转换为 HTML 格式的数据。这样我就可以通过电子邮件将这些数据发送给使用 sql 作业的人。

我使用以下方式发送电子邮件: Query 是将 SQL Query 转换为 HTML 格式的存储过程

DECLARE @html nvarchar(MAX);
DECLARE @INPUT NVARCHAR(20)
SET @INPUT= ''LATE''
EXEC query @html = @html OUTPUT,  @query = N'select Studentsurname,absencecomment,Absencedate from absence where AbsenceDate=CAST(CAST(GETDATE() AS DATE) AS DATETIME and YearLevel in (11,12) and absencemeaning= @INPUT', @orderBy = N'ORDER BY StudentSurname';

EXEC msdb.dbo.sp_send_dbmail

    @profile_name = 'PROFILE',
    @recipients = 'email@email',
    @subject = 'HTML email',
    @body = @html,
    @body_format = 'HTML',
    @query_no_truncate = 1,
    @attach_query_result_as_file = 0;

我的问题是当我尝试执行上述部分时,它给了我一个错误提示 'Late' 附近的语法不正确

在将 sql 查询传递给存储过程时我做错了什么。还有其他方法可以将 sql 查询传递给存储过程吗?

这个问题只发生在我使用 where 子句时。如果我的 select 语句仅以“from table_name”结尾,则不会出现问题。

【问题讨论】:

  • SET @INPUT= ''LATE''.. 应该有单引号..SET @INPUT= 'LATE'
  • @programer_1707 它说无效的列名'Late'
  • 试试这个方法:DECLARE @INPUT NVARCHAR(20) = 'LATE'

标签: sql stored-procedures sql-server-2012 sql-job


【解决方案1】:

试试这个

           DECLARE @html nvarchar(MAX);
           DECLARE @INPUT NVARCHAR(20)
           SET @INPUT= '''LATE''' --To add string with Quotes like this..
           Declare @query nvarchar(MAX) = N'select Studentsurname,absencecomment,Absencedate from absence where AbsenceDate=CAST(CAST(GETDATE() AS DATE) AS DATETIME and YearLevel in (11,12) and absencemeaning='+ @INPUT
           , @orderBy varchar(max) = N'ORDER BY StudentSurname';
           print @query --see difference near 'LATE'
           print @orderBy
           EXEC query @html = @html OUTPUT, @query , @orderBy

【讨论】:

  • 谢谢它的工作,你能解释一下为什么我们必须放这么多这样的引号吗?
  • 因为要在查询中提供一个值,所以该列是 varchar 数据类型,它接受引号内的值。根据您的回答 'LATE' 值是由 LATE 存储在查询中的没有引号所以看起来错误因为 varchar 数据类型接受引号内的值。通过添加引号将值设置为 '''LATE''' 它应该将值存储为 '迟到'..
  • 嗨@JaspreetSaini 如果查询需要任何澄清,请回复我。不要忘记提供支持和勾选标记。
  • 谢谢现在明白了。我已经给你打勾并投票了
  • 我的点赞已被记录,但它不会显示,因为我的声誉未超过 15
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2015-09-16
  • 1970-01-01
  • 2011-10-27
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多