【问题标题】:SQL Filestream - tying up rows with File Stream filesSQL Filestream - 将行与文件流文件捆绑在一起
【发布时间】:2016-08-04 10:58:53
【问题描述】:

希望一个简单的问题能够解决我的阴谋。我已经在我们的 SQL Server 上设置了 Filestream。从我读过的内容来看,我希望看到数据库行中的 GUID 与文件路径中的文件流文件名匹配......但它们不匹配。我还想念其他魔法吗?

数据库表: 其中列 id 是 GUID,FileData 是 Filestream 列。

当我转到存储这些 BLOBS 的位置时,我希望将这些 GUID 视为文件名:

文件流文件

我只是想了解 Filestream 工作的整个过程。我已经做了一些挖掘工作,所以如果有人能够为我填补这些空白,那就太好了。

【问题讨论】:

    标签: sql-server filestream


    【解决方案1】:

    这有点令人困惑。但下面是我最终想通的。

    请注意上面用红色圈出的那一列。类型和名称可能不同。

    DECLARE @BaseDirectory AS varchar(200) = '\\server-name\Instance\DocumentPages\';
    SELECT TOP(10) @BaseDirectory + SUBSTRING(CONVERT(varchar(200), file_stream.PathName(0)), LEN('file_stream\') + CHARINDEX('file_stream\', CONVERT(varchar(200), file_stream.PathName(0)), 1), 36) + '.' + dp.file_type, d.DocumentID
    FROM [Document].[dbo].[DocumentPages] AS dp
        INNER JOIN [Document].[dbo].[Documents] AS d
            ON d.stream_id = dp.stream_id
    ORDER BY d.DocumentID DESC
    

    此查询在此列上使用名为 .PathName() 的函数。这不是我所知道的 SQL 通常工作的方式(通常,函数将列值作为参数)。但确实如此!

    因为我们的系统正在使用可用性组,所以我必须找到基本目录并忽略 SQL Server 返回的内容。

    您也可以尝试使用 file_stream.PathName(0)、file_stream.PathName(1) 或 file_stream.PathName(2) 来尝试查找基本路径。如果路径匹配,则删除 SUBSTRING 逻辑!

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      相关资源
      最近更新 更多