begin process at 2012 05 25 11:58:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

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

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-RECUPER ER-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]


 Sources du même auteur

SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE
SQL SERVER 2000 - VIDER ET COMPACTER TOUTES LES BASES DE DON...
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN...
SQL SERVER - OBTENIR LA POSITION DU PREMIER CHIFFRE D'UNE CH...
SQL SERVER - UPDATE D'UNE TABLE EN BOUCLE PAR LOT

 Sources de la même categorie

Source avec Zip TUTORIEL PL/SQL par Julien39
CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE... par wissemhabboub
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
MYSQL : CRÉATION D'UN GUID par maitredede

 Sources en rapport avec celle ci

Source avec une capture SQL SERVER 2005 - GESTION DE LA LARGEUR DES COLONNES D'UNE R... par FENETRES
SQL SERVER 2000 - CREER DES INDEXES SUR UN CHAMP EXISTANT DA... par fabrice69
SQL SERVER 2005 - DETRUIRE TOUS LES INDEXES APPLIQUES SUR UN... par fabrice69
SQL SERVER 2005 - RECUPERER LA LISTE DES INDEXES EXISTANT SU... par fabrice69
SQL SERVER - PROCÉDURE STOCKÉE PERMETTANT DE RECONSTRUIRE TO... par fabrice69

Commentaires et avis

Commentaire de nivsql le 23/06/2009 11:48:30

J'avous avoir du mal avec la pertinence de ce code, certe il fonctionne, mais le resultat obtenu me semble pauvre.

Ce code nous fait générer une requete par colonne se trouvant dans un index (n requete pour la meme colonne si elle se trouve dans n index) et nous donne le nombre de valeur distinct pour chaque colonne.

J'ai du mal a voir en quoi ces données sont utiles :
1) elles n'offre que peu de possibilité de calcul en ce qui concerne les statistiques de l'index
2) La maniere d'optenir celles-ci est fort complexe alors que les vues de gestion dynamique offrent beaucoup plus d'informations, plus utiles, incluant celles que l'ont peut déduir de celles que nous donne ce code, le tout à l'aide une requete sql unique (a l'aide d'une CTE dans les cas les plus difficiles).

Pourrais tu a l'occasion expliqué plus en détail les buts et interets de ce code ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment faire une association CIM [ par raziel62 ] Salut,j'ai un probleme sur ma base de donnée qui gere des composants hardware, je n'arrive pas a relier deux tables (constructeur et type_composant).j creation d'index sous ms sql serveur ? [ par jimmy69 ] Bonjour a tous, Mes tables sont presque crees sous ms sql serveur 2000...J'avais lu un article sur l'utilite de la creation d' index ...sur les tables Ajouter une colonne [ par olaaa ] En fait je shouaite ajouter une colonne a ma table record_tbl a chaque fois qu'un nouveau tuple est ajouté a la table additional_field_tbl. Pour combien d'index faut il créer ? [ par vincentstryckmans ] Bonjour, Mon application enregsitre les description d'incident ferroviaire. Les causes réelles d'incident sont décrits en 6 mots. Les 4 pre Requete de recherche [ par le_totophe ] Bonsoir à tous, je dois développer (à titre gracieux) un programme dans lequel j'ai besoin d'enregistrer des numéros de tél&# 1 colonne et 3 mises à jour possible [ par aechevar ] Bonjour,Est-il possible en 1 seule opération de mettre à jour une colonne selon 3 cas ?Je m'explique : Si cas1 alors   t pb SELECT avec LIKE [ par Stubbornman ] Salut à tous,quelqu'un peut-il m'expliquer pourquoi cette requête ne fonctionne pas:SELECT * FROM table WHERE colonne LIKE '[a-e]%' OR Ajout d'une colonne de type non null [ par RMI ] Bonjour, Je souhaite ajouter un colonne de type non null dans une table déjà existante, cette colonne ne doit pas avoir de valeur par d remplacement d'un caractère dans une colonne de ma BDD [ par commode59 ] bonjour a tous,J'ai un petit soucis avec ma bdd sql, la plus par de mes enregistrements ont été fait avec des '_' à la place d'espace.& ACCESS : Valeur par défaut [ par alonsyl ] bonjour, j'essaie d'ajouter une colonne a ma base MSACCESS via une rqte SQL.apres verification, je me suis appercu que ca ne fonctionnait pas car


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,710 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales