是否有查询可以获取磁盘上FILESTREAM文件夹中文件的总文件大小?
答案 0 :(得分:13)
以下查询将返回filestreamcolumn
列的字节长度:
SELECT SUM(DATALENGTH(filestreamcolumn)) FROM filestreamtable;
答案 1 :(得分:6)
Remus解决方案的一个缺点是它不包含可用于垃圾收集的旧版本文件。它们将不再是逻辑数据库的一部分,但仍会消耗磁盘空间,直到Filestream垃圾收集器删除它们为止。
从Sql Server 2008 R2开始,您可以查询sys.database_files的size列,查看给定文件流容器的大致大小(即使用的磁盘空间)。
答案 2 :(得分:0)
use <DATABASE_NAME_HERE>
declare @table as nvarchar(100);
declare @columnName as nvarchar(100);
declare @query as nvarchar(500);
declare @sizeValue as nvarchar(100);
declare @generalValue as decimal(38);
declare @generalValueInMb as decimal(15,2);
set @generalValue = 0;
DECLARE tableCursor CURSOR FOR
(
SELECT DB_NAME()+'.**<schemaname_here>**.' + OBJECT_NAME(object_id) AS [FullTableName], name As [ColumnName]
FROM sys.columns
WHERE is_filestream = 1
)
Open tableCursor
fetch next from tableCursor into @table, @columnName
while @@FETCH_STATUS = 0
begin
set @query = 'select @sizeValue = (select sum(Datalength('+@columnName+')) FROM ' + @table +')';
exec sp_executesql @query, N'@sizeValue int output', @sizeValue output;
if @sizeValue is not NULL
begin
set @generalValue = @generalValue + @sizeValue
end
fetch next from tableCursor into @table, @columnName
end
close tableCursor
deallocate tableCursor
select @generalValueInMb = round(@generalValue / 1024 / 1024, 2)
select @generalValueInMb
请注意,您需要在上述代码中的适当位置键入架构名称。