2015-05-14 52 views
2
SELECT d.NAME 
,ROUND(SUM(mf.size) * 8/1024, 0) Size_MBs 
,(SUM(mf.size) * 8/1024)/1024 AS Size_GBs 
FROM sys.master_files mf 
INNER JOIN sys.databases d ON d.database_id = mf.database_id 
WHERE d.database_id > 4 
GROUP BY d.NAME 
ORDER BY d.NAME 

在每個數據庫表的數量我上面的T-SQL腳本,其中列出了上SQL Server實例的所有數據庫與以MB爲單位&金紫荊星章及其相應的大小一起。獲取在SQL Server

我在掙扎的還包括每個數據庫中表的數量列。

是否有人也知道我可以如何改善上面的腳本也顯示每個列出的數據庫中的表總數。或者,也可以獲得每個表中的行數,但這不是一個大問題。

我針對的是sql server 2005和obove。

+1

你不能僅僅通過延長當前腳本做到這一點 - 表定義存儲在每個數據庫中他們自己的元數據表 - 而且不能編寫一個連接到(未知)數量的附加表(每個數據庫一個)的單個SQL查詢, –

回答

1

還不如一個腳本,您可以通過

CREATE TABLE AllTables ([DB Name] sysname, [Schema Name] sysname, [Table Name] sysname) 


    DECLARE @SQL NVARCHAR(MAX) 

    SELECT @SQL = COALESCE(@SQL,'') + ' 
    insert into AllTables 
    select ' + QUOTENAME(name,'''') + ' as [DB Name], [Table_Schema] as 
    [Table Schema], [Table_Name] as [Table Name] from ' + 
    QUOTENAME(Name) + '.INFORMATION_SCHEMA.Tables;' FROM sys.databases 
    ORDER BY name 
    EXECUTE(@SQL)  
    SELECT * FROM AllTables ORDER BY [DB Name],[SCHEMA NAME], [Table Name] 
    DROP TABLE AllTables 

參考獲得請求的結果:List of All Tables in All Databases

1

一個更寬報告關於所有的數據庫可能包括在表,視圖,存儲過程的統計,觸發器,設施(xml,空間索引)等。

if object_ID('TempDB..#AllTables','U') IS NOT NULL drop table #AllTables 
CREATE TABLE #AllTables (
    [DB Name] sysname, 
    [Tables] int, 
    [Views] int, 
    [Procedures] int, 
    [Triggers] int, 
    [Full Text Catalogs] int, 
    [Xml Indexes] int, 
    [Spatial Indexes] int) 

DECLARE @SQL NVARCHAR(MAX) 

SELECT @SQL = COALESCE(@SQL,'') + 'USE ' + quotename(name) + ' 
insert into #AllTables 
select ' + QUOTENAME(name,'''') + ' as [DB Name], 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.tables), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.views), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.procedures), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.triggers), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.fulltext_catalogs), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.xml_indexes), 
    (select count(*) from ' + QUOTENAME(Name) + '.sys.spatial_indexes) 
' 
FROM sys.databases 
ORDER BY name 
-- print @SQL -- debug 
EXECUTE(@SQL) 
SELECT * FROM #AllTables 

提供的解決方案遠遠優化,易於掌握和擴展。

不是最優的,只是零星的報告

基礎上(和學分):http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-to-get-information-about-all-databas/