希望一个简单的问题来解决我的阴谋比什么都重要。我在SQL Server上设置了Filestream。根据我的阅读,我期望看到数据库行中的GUID与文件路径中的文件流文件名相匹配......但它们不匹配。还有其他的魔法,我失踪了吗?
数据库表: 其中column id是GUID,FileData是Filestream列。
当我转到存储这些BLOBS的位置时,我希望将这些GUID视为文件名:
我只想了解Filestream工作原理的整个过程。我已经做了一些挖掘,所以如果有人能够填补这些空白对我来说会很棒。
答案 0 :(得分:0)
有点令人困惑。但下面是我最终想出来的。
注意上面用红色圈出的栏目。类型和名称可能不同。
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逻辑!
希望有帮助!