【发布时间】:2018-10-10 13:58:46
【问题描述】:
大家好 - 我正在尝试创建以下存储过程,患者应在其中通过电子邮件接收附件文档。
文档位于文件夹中,每个文档文件名(例如:LetterPatient_12345)都附加了一个患者 ID (12345)。如何创建存储过程以在文件夹中查找患者 ID。 以下是按患者 ID 存在的所有文档的文件夹。
W:\Files\Shared\Letters\Test
LetterPatient_12345
LetterPatient_56789
LetterPatient_10112
这是插入上述查询的完整存储过程:
Declare @From nvarchar(max) = 'Dev <Development@un.org>'
DECLARE @Mail_Profile_Name VARCHAR(100)
SET @Mail_Profile_Name='DoNotReply'
DECLARE @MessageBody NVARCHAR(Max)
DECLARE @RecipientsList NVARCHAR(max)
DECLARE @MailSubject NVARCHAR(500) = 'Reports'
DECLARE @EmailID INT
DECLARE @FirstName varchar(100),@LastName varchar(100)
DECLARE Email_cursor CURSOR FOR
Select distinct PE.EmailAddress, lr.PatientFirstName, lr.PatientLastName,
Lr.PatientId from Letterrequest lr
Left join Patient PT on PT.PatientId = Lr.PatientId
Left join PatientEmail PE ON PE.PatientId = lr.PatientId
where 1=1
and PT.AssistanceCommunicationMethodId = 1
and PE.PreferredEmailIndicator = 1
and PE.InactiveDateTime IS NULL
OPEN Email_cursor
FETCH NEXT FROM Email_cursor INTO @RecipientsList,@FirstName,@LastName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @MessageBody = 'Dear ' + @FirstName + COALESCE(' ' + @LastName,'') + CHAR(13) + CHAR(10) + 'Please find the letter attached '
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @Mail_Profile_Name,
@recipients = @RecipientsList,
@body = @MessageBody,
@subject = @MailSubject,
@Body_Format = 'HTML' ,
@from_address = @From;
FETCH NEXT FROM Email_cursor INTO @RecipientsList,@FirstName,@LastName
END
CLOSE Email_cursor
DEALLOCATE Email_cursor
【问题讨论】:
-
所有文件都遵循 LetterPatient_PatientId 的命名约定吗?
-
@TimMylott:不,文件命名约定会改变。但该文件将在文件名末尾有患者 ID,所有这些都是 pdf 文件名示例:LetterPatient_patientid MailAssistance_1_patientid PremiumAssistance_123_PatientID
-
为什么要使用存储过程?为什么不直接使用一个简单的脚本(python?)结合一个 SQL 查询(如果你想从数据库中获取数据).. 知道什么时候应该触发它也会有所帮助。
标签: sql-server tsql ssis sp-send-dbmail