Sql server 2000 - creer des indexes sur un champ existant dans toutes les tables de la base

Contenu du snippet

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 / Exemple :


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

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.