2015-10-15 26 views
0

我有一個腳本將文件作爲附件提取到電子郵件中併發送出去。它最近停止了工作。 我正在拉的文件被命名爲「DTH201509240918.xlsx」,最後4個數字是隨機的,所以我使用'^。* $'。這些文件位於源文件夾中,但我總是收到「找不到文件」。 任何幫助將不勝感激爲什麼該文件沒有被拉。SQL電子郵件附件疑難解答

ALTER Procedure [dbo].[DSEmail] as begin 

declare @to varchar(1000)   
     ,@sub varchar(1000)   
     ,@subdate varchar(10)  = CONVERT(Varchar(10),GETDATE(),101) 
     ,@bod varchar(1000)   
     ,@filePath varchar(1000) = '\\source\' 
     ,@fileDate varchar (8)  = CONVERT(Varchar(8),GETDATE(),112) 
     ,@attachments varchar(1000) 
     ,@pathAndFile varchar (1000) 


Set @attachments = 'DTH' + @fileDate + '^.*$' 
Set @pathAndFile = @filePath + @attachments 
Set @sub   = 'dS Report ' + @subdate 
Set @bod   = '\\source\' + @attachments 


Set @to = '[email protected]' 

IF dbo.fn_FileExists(@pathAndFile) = 1 
exec msdb.dbo.sp_send_dbmail 
      @recipients = @to 
      ,@subject = @sub 
      ,@body = @bod 
      ,@file_attachments = @pathAndFile 

ELSE 

exec msdb.dbo.sp_send_dbmail 
      @recipients = @to 
      ,@subject = 'DS Error' 
      ,@body = 'No file was found. Please check \\source\ for today''s file.' 

End 

回答

0

您不能使用正則表達式與master.dbo.fn_FileExists。下面應該能夠讓你確切的文件名,你可以連接到您的電子郵件:要附加到

declare @dir table 
    (
    ID int identity(1, 1) 
      primary key 
      not null, 
    dirEntry nvarchar(max) 
    ); 

insert into @dir 
     (dirEntry) 
     exec xp_cmdshell 'dir ' + @filePath + N'*.*'; 

select d.dirEntry 
from @dir as d 
where d.dirEntry like N'DTH' + @fileDate + '%.xlsx' 

之後,你可以調整你上面的代碼包括確切文件名(S)的電子郵件。

+0

Hello Ralph, 感謝您的建議。 我對添加什麼感到困惑。所以這段代碼應該替換我在原始代碼中標記爲@attachments的正則表達式? 我不確定要刪除和添加什麼或「N」是什麼。 如果您能夠進一步解釋,我將不勝感激。 謝謝。 –