[SQL Server] Afficher l'état des statistiques sur toutes les tables de la base

-- =============================================

-- Author:      KHAROUBI Zouhaier

-- Create date: 15/12/2023

-- Description:  Afficher l'état des statistiques sur toutes les tables de la base

-- =============================================

DROPTABLEIFEXISTS #ListeTable

DROPTABLEIFEXISTS #ListeStatistiques

CREATETABLE #ListeStatistiques

(

NomTable                          VARCHAR(150)  NULL

,[Index Name]              VARCHAR(150)  NULL  

,[AUTOSTATS]                CHAR(3)                     NULL  

,[Last Updated]                    DATETIME             NULL

,ErrorMessage               NVARCHAR(MAX)NULL

)

DECLARE   @num_lig                 ASINT

              ,@nbre_lig                 ASINT

              ,@NomTable                 ASNVARCHAR(250)

              ,@Requete                  ASNVARCHAR(500)

              ,@ErrorMessage             ASNVARCHAR(MAX)

SELECT

IDENTITY(int,1,1)AS num_lig,'EXEC sp_autostats '''+QUOTENAME(T2.[name])+'.'+QUOTENAME(T1.[name])+''''AS Requete ,QUOTENAME(T2.[name])+'.'+QUOTENAME(T1.[name])AS NomTable

,CAST(NULLASCHAR(3))AS AUTOSTATS,CAST(NULLASDATETIME)AS [Last Updated]

INTO #ListeTable

FROMsys.objects T1

JOINsys.schemas T2 ON T2.schema_id=T1.schema_id

WHERE [type]='U'

SELECT @num_lig=1,@nbre_lig=COUNT(num_lig)FROM #ListeTable

WHILE @num_lig <= @nbre_lig

       BEGIN

              BEGINTRY

                     SELECT @Requete=Requete,@NomTable=NomTable FROM #ListeTable WHERE num_lig=@num_lig

                     INSERTINTO #ListeStatistiques([Index Name],[AUTOSTATS],[Last Updated])

                     EXEC (@Requete)

                     UPDATE #ListeStatistiques

                     SET

                     NomTable=@NomTable

                     WHERE NomTable ISNULL

              ENDTRY

              BEGINCATCH

                     SELECT @ErrorMessage=ERROR_MESSAGE()

                     INSERTINTO #ListeStatistiques(NomTable,ErrorMessage)

                     VALUES (@NomTable,@ErrorMessage)

              ENDCATCH

              SELECT @num_lig= @num_lig + 1

       END

SELECT*FROM #ListeStatistiques

--WHERE ISNULL(AUTOSTATS,'')<>'ON'

--ErrorMessage IS NOT NULL

ORDERBY NomTable,[Index Name]

DROPTABLEIFEXISTS #ListeTable

DROPTABLEIFEXISTS #ListeStatistiques