begin process at 2008 07 25 12:49:14
1 216 226 membres
190 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER 2005 - LISTER LES INDEXES AVEC LE NOMBRE DE LIGNE DE CHACUN


Information sur la source



Description

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

  • -----------------------------------------------------------------
  • 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
  • -----------------------------------------------------------------
----------------------------------------------------------------- 
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]
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Animation Flash alimen...
Budget : 6 000€
Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS