Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql Server文件流总文件大小_Sql Server_Filestream - Fatal编程技术网

Sql server Sql Server文件流总文件大小

Sql server Sql Server文件流总文件大小,sql-server,filestream,Sql Server,Filestream,是否有查询可以获取磁盘上FILESTREAM文件夹中文件的总文件大小?以下查询将返回FILESTREAM列的长度(以字节为单位): Remus解决方案的一个缺点是,它不包括可用于垃圾收集的文件的旧版本。它们将不再是逻辑数据库的一部分,但仍将占用磁盘空间,直到Filestream垃圾收集器删除它们 从Sql Server 2008 R2开始,您可以查询sys.database_文件的size列,以获得给定filestream容器使用的大致大小,即磁盘空间 use <DATABASE_NAME

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

以下查询将返回FILESTREAM列的长度(以字节为单位):


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

从Sql Server 2008 R2开始,您可以查询sys.database_文件的size列,以获得给定filestream容器使用的大致大小,即磁盘空间

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

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

我正在运行SQL 2008 R2 SP0 CU8,filestream的size列始终为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