2013-05-10 1 views
2

Мне нужно найти относительное количество свободного места в моей базе данных SQL Server, используя соединение ODBC.Как получить результаты из «DBCC SHOWFILESTATS» с ODBC?

Я хотел попробовать с помощью 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 (и я удостоверился, что других открытых операторов нет).

Есть ли альтернативный способ получения этой информации?

ответ

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.