begin process at 2008 07 06 07:15:59
1 205 472 membres
51 nouveaux aujourd'hui
14 119 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 2000 - CREER DES INDEXES SUR UN CHAMP EXISTANT DANS TOUTES LES TABLES DE LA BASE


Information sur la source



Description

Dans le même ordre d'idée que la source :
- http://www.sqlfr.com/code.aspx?ID=39938

Voila le script qui effectue la création des indexes sur un ensemble de tables sur une base SQL Server 2000.

Source

  • -----------------------------------------------------------------
  • USE [MaDataBase]
  • -----------------------------------------------------------------
  • -- Spécification du champ qui doit être indexé
  • -----------------------------------------------------------------
  • DECLARE @NOM_CHAMP AS VARCHAR(50)
  • SET @NOM_CHAMP = 'MonNomDeChamp'
  • -----------------------------------------------------------------
  • DECLARE @TCompleteName AS VARCHAR(500)
  • DECLARE @SQL AS VARCHAR(4000)
  • DECLARE @NomIDX AS VARCHAR(500)
  • -----------------------------------------------------------------
  • -- Déclaration du Curseur de sélection
  • -----------------------------------------------------------------
  • DECLARE TESTCURSEUR CURSOR
  • FOR SELECT
  • '[IDX_'+ UPPER(TAB.TABLE_NAME) +'_'+ UPPER(@NOM_CHAMP) +']' AS TIndex,
  • '['+ TAB.TABLE_SCHEMA +'].['+ TAB.TABLE_NAME +']' AS TCompleteName
  • FROM
  • INFORMATION_SCHEMA.COLUMNS COL
  • INNER JOIN INFORMATION_SCHEMA.TABLES TAB
  • ON (TAB.TABLE_SCHEMA = COL.TABLE_SCHEMA AND TAB.TABLE_NAME = COL.TABLE_NAME)
  • LEFT OUTER JOIN dbo.sysindexes IDX
  • ON IDX.name = 'IDX_'+ UPPER(TAB.TABLE_NAME) +'_'+ UPPER(@NOM_CHAMP)
  • WHERE
  • COL.COLUMN_NAME = @NOM_CHAMP
  • AND
  • TAB.TABLE_TYPE = 'BASE TABLE'
  • AND
  • IDX.name IS NULL
  • -----------------------------------------------------------------
  • -- Déclaration du Curseur sur la liste des Bases de données
  • OPEN TESTCURSEUR
  • FETCH NEXT FROM TESTCURSEUR INTO @NomIDX, @TCompleteName
  • WHILE (@@FETCH_STATUS >= 0)
  • BEGIN
  • SET @SQL = 'CREATE NONCLUSTERED INDEX '+ @NomIDX +' ON '+ @TCompleteName +' (['+ @NOM_CHAMP +'] ASC) ON [PRIMARY]'
  • EXECUTE (@SQL)
  • FETCH NEXT FROM TESTCURSEUR
  • INTO @NomIDX, @TCompleteName
  • END
  • -----------------------------------------------------------------
  • -- Fermeture du Curseur
  • CLOSE TESTCURSEUR
  • -- Libération de la mémoire prise par le Curseur
  • DEALLOCATE TESTCURSEUR
  • -----------------------------------------------------------------
----------------------------------------------------------------- 
USE [MaDataBase] 
  
----------------------------------------------------------------- 
-- Spécification du champ qui doit être indexé 
----------------------------------------------------------------- 
DECLARE @NOM_CHAMP AS VARCHAR(50) 
SET @NOM_CHAMP = 'MonNomDeChamp' 
  
----------------------------------------------------------------- 
DECLARE @TCompleteName AS VARCHAR(500) 
DECLARE @SQL AS VARCHAR(4000) 
DECLARE @NomIDX AS VARCHAR(500) 
  
----------------------------------------------------------------- 
-- Déclaration du Curseur de sélection 
----------------------------------------------------------------- 
DECLARE TESTCURSEUR CURSOR 
   FOR SELECT 
    '[IDX_'+ UPPER(TAB.TABLE_NAME) +'_'+ UPPER(@NOM_CHAMP) +']' AS TIndex, 
    '['+ TAB.TABLE_SCHEMA +'].['+ TAB.TABLE_NAME +']' AS TCompleteName 
FROM 
    INFORMATION_SCHEMA.COLUMNS COL 
INNER JOIN INFORMATION_SCHEMA.TABLES TAB 
    ON (TAB.TABLE_SCHEMA = COL.TABLE_SCHEMA AND TAB.TABLE_NAME = COL.TABLE_NAME) 
LEFT OUTER JOIN dbo.sysindexes IDX 
    ON IDX.name = 'IDX_'+ UPPER(TAB.TABLE_NAME) +'_'+ UPPER(@NOM_CHAMP)     
WHERE 
    COL.COLUMN_NAME = @NOM_CHAMP 
AND 
    TAB.TABLE_TYPE = 'BASE TABLE' 
AND 
    IDX.name IS NULL 
  
----------------------------------------------------------------- 
-- Déclaration du Curseur sur la liste des Bases de données 
OPEN TESTCURSEUR 
FETCH NEXT FROM TESTCURSEUR INTO @NomIDX, @TCompleteName 
    
WHILE (@@FETCH_STATUS >= 0) 
    BEGIN 
         
        SET @SQL = 'CREATE NONCLUSTERED INDEX '+ @NomIDX +' ON '+ @TCompleteName +' (['+ @NOM_CHAMP +'] ASC) ON [PRIMARY]' 

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

Conclusion

Bon coding

Romelard Fabrice [MVP]
  • signaler à un administrateur
    Commentaire de amina2986 le 08/02/2007 11:27:07

    bien

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS