[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