如何使用ODBC从“DBCC SHOWFILESTATS”检索结果?

时间:2013-05-10 14:16:36

标签: sql-server odbc dbcc

我需要使用ODBC连接找到SQL Server数据库中可用空间的相对数量。

我想尝试使用dbcc showfilestats,但它不会返回任何结果。

阅读INF: Processing DBCC Commands in ODBC applications我明白这是因为这不是一个选择语句。令我感到困惑的是,该声明也没有返回任何信息(与论文相反)。

我也尝试过使用临时表:

declare @FileStats table
(
  Fileid int,
  [FileGroup] int,
  TotalExtents int,
  UsedExtents int,
  Name varchar(255),
  [FileName] varchar(max)
)
insert into @FileStats execute('dbcc showfilestats')

并从该表中选择相同的SQLExecDirect。

select
  1-convert(float, sum(UsedExtents))/convert(float, sum(TotalExtents))
  as FreeDataSpace from @FileStats

这只导致错误24000(我确保没有其他公开声明)。

是否有其他方法可以检索此信息?

1 个答案:

答案 0 :(得分:3)

显然,总有一种替代方法可以做某事。

最终对我有用的是:

SELECT convert(float, (sum(f.size) - sum(fileproperty(f.name,'SpaceUsed')))) / sum(f.size)
FROM sys.sysfiles f JOIN sys.database_files db_f ON f.fileid = db_f.file_id
WHERE db_f.type = 0

它通过ODBC工作,并在Management Studio中执行时提供与原始解决方案相同的结果。