2

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

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

阅读INF:在 ODBC 应用程序中处理 DBCC 命令后,我理解这是因为这不是选择语句。令我困惑的是,该声明也没有返回任何信息(与论文相反)。

我也尝试使用临时表:

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(并且我确保没有其他打开的语句)。

是否有替代方法来检索此信息?

4

1 回答 1

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 中执行时提供与我的原始解决方案相同的结果。

于 2013-05-13T10:41:09.943 回答