我假设您在这里使用表达式作为图像源...
此答案假定文件名在文件夹/子文件夹中仅存在一次。
它使用 xp_cmdshell,因此如果尚未启用,您必须了解启用此功能的安全隐患。 (https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?view=sql-server-ver15)
我这样做的方法是将文件列表放入表变量中,然后将其附加到您的数据集查询
举个例子。
DECLARE @t TABLE(TutorName varchar(50), TutorInitials varchar(20))
INSERT INTO @t VALUES ('Dave Smith', 'DS'), ('Sally James', 'SJ'), ('Rob Jones', 'RJ'), ('Jane Bloggs', 'JB')
DECLARE @dir TABLE(filename varchar(1024))
INSERT INTO @dir
exec xp_cmdshell 'dir "\\myFileServer\ImgesRootFolder\*.png" /b /s'
SELECT DISTINCT
t.*,
MIN(d.[filename]) OVER(PARTITION BY t.TutorName, t.TutorInitials) as ImageFileName
FROM @t t
JOIN @dir d on d.[filename] like '%' + t.TutorInitials + '.png'
第一个表是 'tutors' 表,包含姓名和首字母缩写,第二个表包含针对 \\myFileServer\ImgesRootFolder\*.png 的递归 DIR 命令的结果
那么最后我们要做的就是加入然后在一起。
在本例中,我得到了 MIN() 文件名值,因此请注意,例如,DS.PNG 出现在多个文件夹中,只会返回第一个(按字母顺序)。
查询的结果是这样的。
TutorName TutorInitials ImageFileName
Dave Smith DS \\myFileServer\ImgesRootFolder\randomfolder12345\ds.png
Jane Bloggs JB \\myFileServer\ImgesRootFolder\randomfolder68548\jb.png
Rob Jones RJ \\myFileServer\ImgesRootFolder\randomfolder96325\rj.png
Sally James SJ \\myFileServer\ImgesRootFolder\randomfolder74125\sj.png
您现在可以只使用 ImageFileName 列作为图像源值