SQL文件流 - 使用文件流文件捆绑行

时间:2016-04-13 11:22:55

标签: sql-server filestream

希望一个简单的问题来解决我的阴谋比什么都重要。我在SQL Server上设置了Filestream。根据我的阅读,我期望看到数据库行中的GUID与文件路径中的文件流文件名相匹配......但它们不匹配。还有其他的魔法,我失踪了吗?

数据库表enter image description here 其中column id是GUID,FileData是Filestream列。

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

文件流文件 enter image description here

我只想了解Filestream工作原理的整个过程。我已经做了一些挖掘,所以如果有人能够填补这些空白对我来说会很棒。

1 个答案:

答案 0 :(得分:0)

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

File Stream Table - Hidden under "File Tables" folder

  

注意上面用红色圈出的栏目。类型和名称可能不同。

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逻辑!

希望有帮助!