2013-10-11 15 views
18

SQL Server 2008 R2にTest1というデータベースがあります。ライブサーバーでそこからバックアップを取ってローカルマシンでTest2として復元し、いくつかのテーブルと手順を追加しました。SQL Server 2008でストアドプロシージャとテーブルの総数を数える方法

Test2をライブサーバに戻すと、テスト1でないテスト2のみであるテーブル名とプロシージャ名を取得できるクエリなので、完全に別のデータベースとして扱いますか?私はこれがあなたのテーブルとストアドプロシージャのカウントを与える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

「PC」(アセンブリ[(CLR)ストアドプロシージャ]のようなストアドプロシージャである「P」以外のタイプはありませんか?(http://technet.microsoft.com/en-us/) library/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

を私は頻繁に私が

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 

this blogで見つかったこのスクリプトを使用しますが、情報の種類によって程度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 

希望これは、次のクエリを使用し

SELECT COUNT(*) AS [Total Tables] FROM sys.tables 
SELECT COUNT(*) AS [Total Procedures] FROM sys.procedures 
-1
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName'; 
+3

クエリでは、特定のスキーマのテーブル数がカウントされます。 –

2

を与えます。私は今、いくつかの余分な種類のミリカの回答に基づいて、デフォルト値を以下を使用して、カウントによって並べ替え

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

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

それは私のために働いた... –

+0

これは3年前のSzymonの答えの正確な複製です。 –

2

の下に試してみてくださいあなたにいくつかの追加のヘルプ

0

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

このスクリプトを使用します。スイッチケースステートメントを使用していません。

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 
関連する問題