如何獲取MSSQLServer的庫空間大小

sp_spaceused是SQLServer提供的一個系統存儲過程可用於獲取當前庫(必須用use命令先指定庫)的空間,而且返回的是多結果集,人工看看還行,程序中用起來就不方便了。

 

我看了下sp_spaceused的源碼,想搞一個能一次獲取所有庫空間的過程。但碰到了個問題,有些庫特別是從其它機器上恢復過來的庫,其sysindexs、sysfiles表不在master庫中而在自己庫中。這要求根據不同庫的dbo去獲取這些表。

 

考慮來考慮去,最後採用動態SQL語句(即exec("....."))的方法。這樣可以通過"select .... from [" +@dbname +"].dbo.sysfiles where ..."的方法動態獲取庫表。

 

但第二個問題出現了,如何將獲取到的值從動態結果中傳出來?方法是建個零時表( create table #work ...)然後將動態語句的結果更新到該表中(exec("update #work set xxx=s.xxx from (select ... from ....) s"))。最後select * from #work。

 

一切OK!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章