使用 sp_send_dbmail 和 T-SQL 处理文件路径中的子文件夹

Working with sub-folders in file path with sp_send_dbmail and T-SQL

是否可以使用通配符在 @file_attachements 路径中填充子文件夹名称?

我运行 查询以获取我要查找的文档名称。然后我将其分配给一个变量并将 @file_location@document_name 连接起来以获得完整路径,但不幸的是我遇到了一个问题,即该文件名将位于 [=14] 的子文件夹中=].

我有以下设置作为示例:

DECLARE @file_attachment VARCHAR(MAX)
DECLARE @file_location VARCHAR(MAX)
DECLARE @my_email VARCHAR(MAX)
DECLARE @BodyContent VARCHAR(MAX)
DECLARE @EmailSubject VARCHAR(MAX)
DECLARE @DocumentName VARCHAR(MAX)

SET @DocumentName = (SELECT Cast(Document_Name AS VARCHAR(MAX)) as 'DocumentName'
                     FROM   dbo.tblDocuments
                     WHERE  TemplateID = 471
                            AND Cast(Document_Date AS DATE) = Cast(Getdate() - 1 AS DATE))
SET @file_location ='\server\directory\sub-directory\'
SET @my_email = 'computer.user@aol.com'
SET @file_attachment = @file_location + @DocumentName  

实际文件将位于此处 \server\directory\sub-directory\another sub-dir\myfile.docx

因为第二个子目录会有所不同。当我连接 @file_location@DocumentName.

时,我似乎无法解释这一点

如果我对 @file_location 中的第二个子目录进行硬编码,我可以让它正常发送,但正如我提到的,第二个文件夹将会改变。

然后在设置sp_send_dbmail时将@file_attachments设置为= @file_location

我会为此使用 xp_dirtree,因为如果我们将 depth 设置为 0,它也会在子文件夹中查找文件。

DECLARE @ParentFolder VARCHAR(256) = '\server\directory\sub-directory\'

IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames
CREATE TABLE #FileNames (
    id int IDENTITY(1,1)
    ,subdirectory nvarchar(512)
    ,depth int
    ,isfile bit)
INSERT #FileNames (subdirectory,depth,isfile)
EXEC xp_dirtree @ParentFolder , 0, 1

SELECT * FROM #FileNames