【问题标题】:Sql Server FILESTREAM Total File SizeSql Server FILESTREAM 总文件大小
【发布时间】:2011-02-23 03:09:29
【问题描述】:

是否有查询可以让我获得磁盘上 FILESTREAM 文件夹中文件的总文件大小?

【问题讨论】:

    标签: sql-server filestream


    【解决方案1】:

    以下查询将返回filestreamcolumn 列的字节长度:

    SELECT SUM(DATALENGTH(filestreamcolumn)) FROM filestreamtable;
    

    Source

    【讨论】:

      【解决方案2】:

      Remus 解决方案的一个缺点是它不会包含可用于垃圾收集的旧版本文件。它们将不再是逻辑数据库的一部分,但仍会占用磁盘空间,直到 Filestream 垃圾收集器将它们删除。

      从 Sql Server 2008 R2 开始,您可以查询 sys.database_files 的 size 列以获取给定文件流容器的大致大小(即使用的磁盘空间)。

      【讨论】:

      • 我正在运行 SQL 2008 R2 SP0 CU8,文件流的大小列始终为 0。
      【解决方案3】:
      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
      

      请注意,您需要在上述代码中的适当位置键入架构名称。

      【讨论】:

        【解决方案4】:

        使用 your_database 去

        选择 (SELECT SUM(CAST(df.size as float)) FROM sys.database_files AS df WHERE df.type in (0, 2, 4)) AS [DbSize], (SUM(a.total_pages) + (SELECT ISNULL(SUM(CAST(df.size as bigint)), 0) FROM sys.database_files AS df WHERE df.type = 2)) AS [SpaceUsed] 从 sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id left join sys.internal_tables it on p.object_id = it.object_id

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2012-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        相关资源
        最近更新 更多