2013-10-11 37 views
18

SQL Server 2008 R2中有數據庫Test1。在現場服務器上,我從那裏進行備份,並在我們的本地機器上將其恢復爲Test2,並添加了一些表格和過程。如何統計SQL Server 2008中存儲過程和表的總數

如果我們將Test2恢復到活動服務器上,那麼它是否可以獲取表名和過程名的任何查詢,它只在測試2中,而不在測試1中,或者SQL Server將它視爲完全不同的數據庫?

,什麼是查詢,如果我只想知道的Test1Test2數據庫

回答

59

差數這會給你的表和存儲過程的計數。

SELECT 
    CASE TYPE 
     WHEN 'U' 
      THEN 'User Defined Tables' 
     WHEN 'S' 
      THEN 'System Tables' 
     WHEN 'IT' 
      THEN 'Internal Tables' 
     WHEN 'P' 
      THEN 'Stored Procedures' 
     WHEN 'PC' 
      THEN 'CLR Stored Procedures' 
     WHEN 'X' 
      THEN 'Extended Stored Procedures' 
    END, 
    COUNT(*)  
FROM SYS.OBJECTS 
WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X') 
GROUP BY TYPE 

您可以在sys.objects中找到數據庫中的所有類型的對象。您將不得不在每個數據庫上運行此查詢以查看對象的數量。

您可以在sys.objectshere中找到有關儲存的所有信息。

+0

是否存在比'P'類型存儲過程'P'(Assembly [(CLR)stored-procedure](http://technet.microsoft.com/en-us/)庫/ ms190790(v = SQL.105)的.aspx))? –

+0

@TimSchmelter我不知道這樣,我會更新我的查詢。 –

+0

'X'也可以是一個存儲過程 - 請參閱[this](http://stackoverflow.com/questions/2907049/interpreting-type-codes-in-sys-objects-in-sql-server)相關的問題一個列表。 – Bridge

13

您可以使用這些2個查詢:

select count(*) as TablesCount from sys.tables 
select count(*) as ProceduresCount from sys.procedures 
5

我經常使用這個劇本我就this blog

USE [MyDatabase] 
GO 
SELECT 'Count' = COUNT(*), 'Type' = CASE type 
       WHEN 'C' THEN 'CHECK constraints' 
       WHEN 'D' THEN 'Default or DEFAULT constraints' 
       WHEN 'F' THEN 'FOREIGN KEY constraints' 
       WHEN 'FN' THEN 'Scalar functions' 
       WHEN 'IF' THEN 'Inlined table-functions' 
       WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraints' 
       WHEN 'L' THEN 'Logs' 
       WHEN 'P' THEN 'Stored procedures' 
       WHEN 'R' THEN 'Rules' 
       WHEN 'RF' THEN 'Replication filter stored procedures' 
       WHEN 'S' THEN 'System tables' 
       WHEN 'TF' THEN 'Table functions' 
       WHEN 'TR' THEN 'Triggers' 
       WHEN 'U' THEN 'User tables' 
       WHEN 'V' THEN 'Views' 
       WHEN 'X' THEN 'Extended stored procedures' 
    END 

    FROM sys.objects 
    GROUP BY type 
    ORDER BY type 
GO 

發現您可以按類型從信息修改有關sys.objects

或者通過這個參考文獻Object Catalog Views的對象,因爲你已經得到了以前答案中的表和過程的答案,例如

SELECT count(*) AS MyTables FROM sys.tables 
SELECT count(*) AS MyProcedures FROM sys.procedures 
SELECT count(*) AS MyTriggers FROM sys.triggers 
SELECT count(*) AS MyViews FROM sys.views 

希望這給你一些額外的幫助

-1
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName'; 
+3

您的查詢僅計算特定模式的表的數量。 –

2

試試下面

SELECT COUNT(*) AS [Total Tables] FROM sys.tables 
SELECT COUNT(*) AS [Total Procedures] FROM sys.procedures 
+0

它爲我工作... –

+0

這是從3年前Szymon的答案確切的副本。 –

2

使用下面的查詢。

USE YOURDBNAME 
SELECT COUNT(*) AS totalTable from information_schema.tables 
WHERE table_type = 'base table' 

select Count(*) AS TotalProc from sys.procedures 
0

我現在使用下面的基於Milica的答案與一些額外的類型,默認值和按數量排序。

SELECT 'Count' = COUNT(*), 'Type' = CASE type 
    WHEN 'AF' THEN 'Aggregate function (CLR)' 
    WHEN 'C' THEN 'CHECK constraints' 
    WHEN 'D' THEN 'Default or DEFAULT constraints' 
    WHEN 'F' THEN 'FOREIGN KEY constraints' 
    WHEN 'FN' THEN 'Scalar functions' 
    WHEN 'FS' THEN 'Assembly (CLR) scalar-function' 
    WHEN 'FT' THEN 'Assembly (CLR) table-valued function' 
    WHEN 'IF' THEN 'Inlined table-functions' 
    WHEN 'IT' THEN 'Internal table' 
    WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraints' 
    WHEN 'L' THEN 'Logs' 
    WHEN 'P' THEN 'Stored procedures' 
    WHEN 'PC' THEN 'Assembly (CLR) stored-procedure' 
    WHEN 'PG' THEN 'Plan guide' 
    WHEN 'PK' THEN 'PRIMARY KEY constraint' 
    WHEN 'R' THEN 'Rules' 
    WHEN 'RF' THEN 'Replication filter stored procedures' 
    WHEN 'S' THEN 'System tables' 
    WHEN 'SN' THEN 'Synonym' 
    WHEN 'SO' THEN 'Sequence object' 
    WHEN 'SQ' THEN 'Service queue' 
    WHEN 'TF' THEN 'Table functions' 
    WHEN 'TR' THEN 'Triggers' 
    WHEN 'U' THEN 'User tables' 
    WHEN 'UQ' THEN 'UNIQUE constraint' 
    WHEN 'V' THEN 'Views' 
    WHEN 'X' THEN 'Extended stored procedures' 
    ELSE type 
END 
FROM sys.objects 
GROUP BY type 
ORDER BY 'Count' desc 
0

使用此腳本。它不使用switch case語句。

USE [MyDatabase] 
GO 
select distinct type_desc as 'Type Description', Count from 
(SELECT 'Count' = COUNT(*), type FROM sys.objects GROUP BY type) as dbstatistics 
left join sys.objects on dbstatistics.type = sys.objects.type ORDER BY Count desc 
GO