处理SQL FILESTREAM数据的文件大小

时间:2013-08-09 18:38:50

标签: .net sql-server tsql datalength sqlfilestream

使用Sql Server的FILESTREAM功能将文档存储在数据库中时,处理文件大小的正确方法是什么?

我知道您可以在文件流列中使用TSQL命令DATALENGTH(),但对于this Microsoft article而言,这可能并不总是最好的想法:

  

避免在应用程序中检索大量BLOB文件的数据长度。这是一项耗时的操作,因为大小未存储在SQL Server数据库引擎中。如果必须确定BLOB文件的长度,请使用Transact-SQL DATALENGTH()函数确定BLOB关闭时的大小。 DATALENGTH()不会打开BLOB文件来确定其大小。

我有点不清楚上面是否说如果可能的话你应该避免使用DATALENGTH(),或者是否是推荐的检索文件大小的方法。

如果我必须经常访问文档大小以将其作为元数据显示给用户,建议检索它们的方法是什么?将它们存储在单独的字段中?或者datalength()足够快?

1 个答案:

答案 0 :(得分:1)

我认为如果可以避免,那篇文章建议使用DATALENGTH()。

将文件大小存储在单独的列中是一种合适的替代方法,以及有关文件的其他元数据(内容类型,扩展名,时间戳等)。这将允许您更有效地查询/过滤文件详细信息。

如果不希望文件内容发生变化,只需更新文件大小列,同时保留文件流数据是最简单的。

如果预计内容会发生变化,您还需要记住更新文件大小。这也可以在具有持久计算列的Sql中完成