Сначала вам нужно настроить курсор и добавить переменную @PatientId.
ПОЛУЧИТЬ СЛЕДУЮЩИЙ ОТ Email_cursor INTO @ RecipientsList, @ FirstName, @ LastName, @ PatientId
Использование этого в качестве справки: Как вывести список файлов в папке с SQL Server
При использовании хранимой процедуры xp_DirTree, вот пример того, как вы могли бы выполнитьчто вы ищете:
DECLARE @FilePath NVARCHAR(500);
DECLARE @FileAttachment NVARCHAR(MAX) = ''
DECLARE @PatientID INT
SET @PatientID = 20181002
SET @FilePath = N'W:\Files\Shared\Letters\Test';
DECLARE @FileList TABLE
(
[FileName] NVARCHAR(500)
, [depth] INT
, [file] INT
);
--using xp_DirTree:
--Parameters:
--directory - This is the directory you pass when you call the stored procedure; for example 'D:\Backup'.
--depth - This tells the stored procedure how many subfolder levels to display. The default of 0 will display all subfolders.
--isfile - This will either display files as well as each folder. The default of 0 will not display any files.
--This gets a list of ALL files in your directory
--This before your cursor
INSERT INTO @FileList (
[FileName]
, [depth]
, [file]
)
EXEC [master].[sys].[xp_dirtree] @FilePath
, 1
, 1;
--Add this code inside your cursor to filter on only those files that contain the @PatientId and build out the string of files to attach.
SELECT @FileAttachment = @FileAttachment + @FilePath + '\' + [FileName] + ';'
FROM @FileList
WHERE PATINDEX('%' + CONVERT(NVARCHAR, @PatientID) + '%', [FileName]) <> 0
--This just removes the trailing ;
SET @FileAttachment = SUBSTRING(@FileAttachment,1,LEN(@FileAttachment)-1)
--Then you can add the @file_attachments parameter to sp_send_dbmail and set that equal to the @FileAttachment variable.
SELECT @FileAttachment
Просто примечание к каталогу, в котором находятся файлы.Учетная запись, на которой запущена служба SQL Server, должна иметь доступ к каталогу, в котором находятся файлы, или к агенту SQL, или при запуске через учетную запись-посредник.Я предполагаю, что "W: \" находится на сервере, где выполняется эта хранимая процедура.Если нет, он должен быть доступен с сервера и учетной записи.