我需要使用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(我确保没有其他公开声明)。
是否有其他方法可以检索此信息?
答案 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中执行时提供与原始解决方案相同的结果。