0

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

当我单独运行该查询时,它会很好地返回它。我怀疑它在整个 T-SQL 语句中的某些内容不正确。我有点像 db newb。任何澄清都会非常有帮助。

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
4

1 回答 1

1

使用网络服务器而不是 SQL Server 来实际发送电子邮件是否可行?如果是这样,我建议这样做。

使用数据库执行此操作在性能方面可能存在风险。游标通常很慢,因为它需要单独对每一行执行操作。在这种情况下,您正在为每一行调用一个过程,这会使事情变得更糟。

如果您只是将结果集返回到您的网络服务器,则可以使用那里的内置电子邮件功能。由于您的查询工作正常,您将解决您的数据库问题,并可能为您自己节省很多性能问题。

作为旁注,是否可以使用 CSS 进行样式而不是<b>标签?;)

编辑:如果您无法将此功能移至网络服务器,请尝试set @tableHTML在行尾添加单引号。它缺少一个结束引号,这会导致语法错误。此外,请确保在完成后释放光标:DEALLOCATE cursorName

于 2013-01-22T21:29:41.240 回答