【问题标题】:Using a LIKE clause within string.Concat()在 string.Concat() 中使用 LIKE 子句
【发布时间】:2021-10-19 09:43:28
【问题描述】:

我正在尝试显示从服务器中提取的图像文件。在 SSRS 中,我之前曾设法做到这一点,但最近为了增加安全性,位置已更改,因此每个文件都位于其自己的文件夹中,该文件夹具有一个随机字符串作为名称。

在我使用这个之前:

=string.Concat("/files/reports/images/",Fields!FormTutorInitials.Value, ".jpg")

从它的位置拉取文件。每个文件都以导师姓名首字母命名,因此姓名首字母为 ABC 的导师将从 /files/reports/images/ABC.jpeg 中提取他们的图片。然而,现在该文件位于如下位置:

/files/reports/images/rgdg5w-gtreh65-hts-56hehj-5rs333/ABC.jpeg

有没有办法在代码中插入 LIKE 子句?我试过=string.Concat("/files/reports/images/",LIKE *Fields!FormTutorInitials.Value, ".jpg"),但它不接受它。

【问题讨论】:

    标签: visual-studio reporting-services visual-studio-2019


    【解决方案1】:

    我假设您在这里使用表达式作为图像源...

    此答案假定文件名在文件夹/子文件夹中仅存在一次。 它使用 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 列作为图像源值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      相关资源
      最近更新 更多