Sql server 2005 - lister les indexes avec le nombre de ligne de chacun

Contenu du snippet

Sur la base des précédentes sources :
- http://www.sqlfr.com/code.aspx?ID=39938
- http://www.sqlfr.com/codes/SQL-SERVER-2005-RECUPERER-LISTE-INDEXES-EXISTANT-SUR_40066.aspx

Voila un exemple permettant de générer les requêtes de pour chaque index.

Source / Exemple :


----------------------------------------------------------------- 
USE [Strip3Prod] 
  
----------------------------------------------------------------- 
-- Spécification du champ qui doit être indexé 
----------------------------------------------------------------- 
DECLARE @NOM_CHAMP AS VARCHAR(50) 
SET @NOM_CHAMP = 'MonNomDeChamp' 
  
----------------------------------------------------------------- 
DECLARE @SQLRequest AS VARCHAR(MAX) 
DECLARE @SQL AS VARCHAR(MAX) 
  
----------------------------------------------------------------- 
-- Déclaration du Curseur de sélection 
----------------------------------------------------------------- 
DECLARE TESTCURSEUR CURSOR 
   FOR		SELECT 
	'SELECT '''+ IDX.name +''' AS INDEX_NAME, '''+ OBJ.name +''' AS OBJECT_NAME, '''+ COL.name +''' AS COLUMN_NAME, COUNT(DISTINCT ['+ COL.name +']) NB_ROWS FROM ['+ SCH.name +'].['+ OBJ.name +'] '

FROM sys.index_columns IDXC 
INNER JOIN sys.objects OBJ 
        ON IDXC.object_id = OBJ.object_id 
			--AND OBJ.name = 'Document')
INNER JOIN sys.schemas SCH 
        ON SCH.schema_id = OBJ.schema_id 
INNER JOIN sys.indexes IDX 
        ON (IDXC.object_id = IDX.object_id AND IDXC.index_id = IDX.index_id)
INNER JOIN sys.columns COL 
        ON (IDXC.column_id = COL.column_id AND OBJ.object_id = COL.object_id) 
WHERE 
    (OBJ.type = 'U' OR OBJ.type = 'V')
ORDER BY OBJ.name
  
----------------------------------------------------------------- 
-- Déclaration du Curseur sur la liste des Bases de données 
OPEN TESTCURSEUR 
FETCH NEXT FROM TESTCURSEUR INTO @SQLRequest
    
WHILE (@@FETCH_STATUS >= 0) 
    BEGIN 
         
        SET @SQL = @SQLRequest
		PRINT @SQL

--        EXECUTE (@SQL) 
  
        FETCH NEXT FROM TESTCURSEUR 
        INTO @SQLRequest 
    END 
  
----------------------------------------------------------------- 
-- Fermeture du Curseur 
CLOSE TESTCURSEUR 
   
-- Libération de la mémoire prise par le Curseur 
DEALLOCATE TESTCURSEUR 
  
-----------------------------------------------------------------

Conclusion :


Bon coding

Romelard Fabrice [MVP]

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.