无法使t-SQL电子邮件警报正常工作

无法使t-SQL电子邮件警报正常工作,sql,sql-server,tsql,Sql,Sql Server,Tsql,基本上,我正在尝试创建一个T-SQL语句来向我发送电子邮件警报。我已附上以下问题。查询从select开始,在Tat 0结束,这是我想要执行的,并通过电子邮件返回这些数据 当我单独运行该查询时,它返回的结果很好。我怀疑这整个T-SQL语句中的某些东西是不正确的。我是个db新手。任何澄清都会非常有帮助 begin EXEC msdb.dbo.sp_send_dbmail @profile_name = 'TRGEmail', @recipients = 'test@test.com', @body

基本上,我正在尝试创建一个T-SQL语句来向我发送电子邮件警报。我已附上以下问题。查询从select开始,在Tat 0结束,这是我想要执行的,并通过电子邮件返回这些数据

当我单独运行该查询时,它返回的结果很好。我怀疑这整个T-SQL语句中的某些东西是不正确的。我是个db新手。任何澄清都会非常有帮助

begin
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'TRGEmail',
@recipients = 'test@test.com',
@body = 'The cases below have reach TAT 3 for PRI X Ray. Please set accordingly.

',
@query = 'select
 PATIENTS.FirstName, PATIENTS.Lastname, 
 STUDIES.study_datetime, 
 STUDY_LIST_VIEW.tat, 
 PATIENTS.Patient_ID
 from
opalrad.dbo.INSTITUTIONS INSTITUTIONS, 
opalrad.dbo.PATIENTS PATIENTS, 
opalrad.dbo.STATUSES STATUSES, 
opalrad.dbo.STUDIES STUDIES, 
opalrad.dbo.studies_calc studies_calc, 
opalrad.dbo.STUDY_LIST_VIEW STUDY_LIST_VIEW, 
opalrad.dbo.TRANSCRIPTION_TEXT TRANSCRIPTION_TEXT

 where 
STUDIES.study_id = studies_calc.study_id AND 
STUDIES.institution_id = INSTITUTIONS.institution_id AND 
TRANSCRIPTION_TEXT.STUDY_ID = STUDIES.study_id AND 
TRANSCRIPTION_TEXT.STUDY_ID = studies_calc.study_id AND 
PATIENTS.Patient_ID = STUDIES.patient_id AND 
STUDY_LIST_VIEW.INSTITUTION_ID = INSTITUTIONS.institution_id AND 
STUDY_LIST_VIEW.PATIENT_ID = PATIENTS.Patient_ID AND 
STUDY_LIST_VIEW.study_id = STUDIES.study_id AND 
STUDY_LIST_VIEW.study_id = studies_calc.study_id AND 
((INSTITUTIONS.institution_id= 569 ) AND 
(STUDY_LIST_VIEW.tat=0))',
 @subject = 'PRI STAT 3 requiring attention';
 end

使用Web服务器而不是SQL Server发送电子邮件是否可行?如果是这样的话,我建议这样做

使用数据库执行此操作在性能方面可能存在风险。游标通常比较慢,因为它需要分别对每一行执行操作。在本例中,您正在为每一行调用一个过程,这会使情况变得更糟

如果只是将结果集返回到Web服务器,则可以使用其中内置的电子邮件功能。由于您的查询工作正常,您将解决数据库问题,并有可能在以后的过程中避免许多性能问题

作为旁注,是否可以使用CSS来代替标签进行样式设计


编辑:如果无法将此功能移动到Web服务器,请尝试在set@tableHTML行的末尾添加一个引号。缺少结尾引号,这会导致语法错误。此外,请确保在使用完光标后释放光标:释放光标名称

-20年前,ANSI-92 SQL标准中断了旧式的逗号分隔表格列表样式,目前有20个这样的作业设置。我刚刚接手这个职位,并加入了所要求的内容。还没来得及调整系统。当你说webserver时,你指的是IIS?我知道这不是一个数据库问题,我只是从一个正在工作的作业中复制并试图修改它。如本教程所示:如果您将IIS作为Web服务器运行,那么是的。我绝对推荐使用Web服务器。但如果你不打算这样做,你可能会有一些其他问题。看起来set@tableHTML行末尾缺少一个引号,这将导致语法错误。此外,在使用完光标后,还应取消对其的分配。我将更新我的答案以包含这些要点。我将编辑查询,使其符合我真正希望查询执行的操作。我想运行查询并让它返回结果,仅此而已。我可以看到您添加了单引号,这很好。然而,您现在所拥有的并不会达到您所期望的效果,因为@dict变量从未设置过,而且您还去掉了用于行的DECLARE cursorName游标。在我的环境中,如果我将这两个都添加回去,它运行良好,至少可以打印电子邮件而不是调用dbo.sp_send_dbmail。你有没有收到一个特定的错误,或者你怎么知道它不起作用?你说当你添加声明行时,它可以与发送的电子邮件一起工作?你打印电子邮件是什么意思?我没有收到具体的错误,只是没有收到电子邮件。它说这项工作运行成功。我有20个其他的工作发送电子邮件好,我复制这些工作的查询,并试图修改它们。谢谢你的帮助。