SQL Server supprimer et recréer les index d'une table
J'ai une situation dans mon SQL Server 2008.
J'ai besoin de changer un type de colonne, mais les indices sont la prévention de la modification. Mais à cause de la base de données est sur plusieurs clients, je ne sais pas comment de nombreux index existe impliquant la colonne.
Il n'y a aucun moyen d'obtenir, par programmation générale, tous les index qui implique la colonne et de les déposer, et après la alter table
déclaration de recréer automatiquement?
J'ai entendu dire que la désactivation de leur cam mess avec la table parce que le changement de type.
Je vais changer de type tinyint de type smallint.
- Il n'y a aucun moyen direct pour supprimer et recréer les index. Vous pouvez créer un script tous les indices nécessaires avant de tomber. Une fois que vous avez changé de types de données vous pouvez utiliser ces de CRÉER des scripts pour recréer les index.
- J'ai fourni un exemple de code sur la façon de le faire ici stackoverflow.com/a/46335197/1878141
Vous devez vous connecter pour publier un commentaire.
DÉSACTIVER tous les index de la table de destination
Ensuite Modifier le type de données d'une colonne
Après qui Permettent Index
Aussi essayer ceci pour connaître l'ensemble des indices sur la table avec les noms de colonne:
Vous pouvez utiliser le script ci-dessous qui renvoie le Nom de l'Index et du Type de Table/Colonne.:
Espère Que Cela Aide...
Vous pouvez utiliser les outils intégrés pour faire ce travail. Dans SQL Server Management Studio, cliquez sur "Outils" puis "Options"
D'étendre les "Explorateur d'Objets SQL Server" ensemble et, Dans ce cadre, cliquez sur "Script".
Faites défiler jusqu'à la "Table Et des Options de Vue" sur le côté droit.
Trouver le dossier appelé "Script Index" et réglez-le sur "True", puis cliquez sur OK.
Lorsque vous cliquez droit sur votre table dans l'Explorateur d'Objets, vous avez des options de Script "Comme..." sélection de l'une de ces options va maintenant créer un script sur l'index, ainsi que le tableau lui-même et ses clés. Copier les scripts requis, ou tout simplement courir le tout en fonction de votre besoin.
Permet de supposer base de cas (colonne n'est pas une partie de toute contrainte, pas une colonne XML ayant index XML sur elle, etc.), le suivant peut être fait:
select (...) from
<sys.indexes + other sys schema views> FOR XML ...
avec un préfixe "IX_' ('IX_1', 'IX_2", etc...)
Voici quelques exemple SQL de suppression et recréation d'un indice de sécurité:
Voici un code C# que les pompes à cela:
Voici quelques C# (qui peuvent être converties en SQL) pour obtenir le schéma de l'index:
Donc, fondamentalement, vous exécutez le dernier morceau de code ici, itérer sur les résultats (les index et les colonnes) et d'appeler GetCreateIndexScript pour chaque indice qui est retourné. Ensuite, vous pouvez exécuter chacun des états qui sont créés à supprimer et recréer les index.
Cette même approche pourrait être utilisée avec TSQL, ou une autre langue.