web-dev-qa-db-fra.com

Comment compter le nombre total de procédures stockées et de tables dans SQL Server 2008

J'ai la base de données Test1 dans SQL Server 2008 R2. Sur le serveur en ligne, j’ai pris une sauvegarde à partir de là et l’ai restaurée sur notre ordinateur local sous le nom Test2 et ajouté quelques tables et procédures.

Si nous restaurons Test2 sur le serveur actif, est-ce que c'est une requête qui peut obtenir le nom des tables et le nom de la procédure qui ne figure que dans le test 2 et non dans le test 1 ou que SQL Server a traité comme base de données totalement différente?

Et quelle est la requête si je veux connaître uniquement le nombre de bases de différences Test1 et Test2

22
Shashank

Cela vous donnera le nombre de tables et de procédures stockées.

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

Vous pouvez trouver dans sys.objects tous les types d'objets de la base de données. Vous devrez exécuter cette requête sur chacune de vos bases de données pour connaître le nombre d'objets.

Vous pouvez trouver toutes les informations sur ce qui est stocké dans sys.objectsici .

69
Radu Gheorghiu

Vous pouvez utiliser ces 2 requêtes:

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

J'utilise souvent ce script que j'ai trouvé sur ce 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

Vous pouvez le modifier par type à partir d’informations sur sys.objects

Ou par objet de cette référence Vues du catalogue d'objets , comme vous avez déjà obtenu une réponse pour les tables et les procédures dans les réponses précédentes, par exemple.

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

J'espère que cela vous donne une aide supplémentaire 

5
Milica Medic

Utilisez les requêtes suivantes.

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

select Count(*) AS TotalProc from sys.procedures
2
Muhammad Awais

J'utilise maintenant le texte ci-dessous, basé sur la réponse de Milica avec quelques types supplémentaires, une valeur par défaut et trié par nombre.

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
1
Taran

Utilisez ce script. Il n'utilise pas la déclaration de cas de commutateur.

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
0
Prabhu P