Des outils de génération automatique peuvent créer toutes les tables d'une base selon un même schéma (on retrouve certains champs dans toutes les tables).
On peut vouloir créer un index sur ces champs, ce qui peut être une erreur.
Voila donc un script qui effectue l'inverse du script de création :
-
http://www.sqlfr.com/codes/SQL-SERVER-2005-CREER-INDEXES-SUR-CHAMP-EXISTANT_39938.aspx
Source / Exemple :
-- =============================================
-- Author: ROMELARD FABRICE
-- Create date: 18-10-2006
-- Description: Script de destruction des Indexes avec un champ choisi
-- =============================================
---------------------------------------------------------------------------------------------------------------------------------------
USE [MaBase]
---------------------------------------------------------------------------------------------------------------------------------------
-- Spécification du champ qui doit être indexé
---------------------------------------------------------------------------------------------------------------------------------------
DECLARE @NOM_CHAMP AS VARCHAR(50)
SET @NOM_CHAMP = 'MonChamp'
---------------------------------------------------------------------------------------------------------------------------------------
DECLARE @SQL AS VARCHAR(MAX)
---------------------------------------------------------------------------------------------------------------------------------------
-- Déclaration du Curseur de sélection
---------------------------------------------------------------------------------------------------------------------------------------
DECLARE TESTCURSEUR CURSOR
FOR SELECT 'DROP INDEX ['+ IDX.name +'] ON ['+ SCH.name +'].['+ OBJ.name +'] WITH (ONLINE = OFF)' AS SQLCMD
FROM sys.index_columns IDXC INNER JOIN sys.objects OBJ ON IDXC.object_id = OBJ.object_id
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') AND COL.name = @NOM_CHAMP
---------------------------------------------------------------------------------------------------------------------------------------
-- Déclaration du Curseur sur la liste des indexes
OPEN TESTCURSEUR
FETCH NEXT FROM TESTCURSEUR INTO @SQL
WHILE (@@FETCH_STATUS >= 0)
BEGIN
PRINT (@SQL)
--EXECUTE (@SQL)
FETCH NEXT FROM TESTCURSEUR
INTO @SQL
END
---------------------------------------------------------------------------------------------------------------------------------------
-- Fermeture du Curseur
CLOSE TESTCURSEUR
-- Libération de la mémoire prise par le Curseur
DEALLOCATE TESTCURSEUR
---------------------------------------------------------------------------------------------------------------------------------------
Conclusion :
Bon coding
Romelard Fabrice [MVP]
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.