J'écris un script de mise à niveau DB qui va vérifier si un index a les deux colonnes de droite définies. Si ce n'est pas le cas, ou s'il en a seulement un, alors je vais le supprimer (y a-t-il un moyen de modifier un index?) Et ensuite le recréer avec les deux.Existe-t-il une requête T-SQL propre que je peux utiliser pour vérifier qu'un index a les bonnes colonnes?
5
A
Répondre
7
Je n'ai pas de base de données immédiatement à portée de main pour tester cela, mais vous devriez être capable de voir si une colonne existe dans un index en utilisant l'instruction IF EXISTS suivante.
Je ne suis pas sûr si vous pouvez modifier un index à la volée.
IF EXISTS
(
SELECT MyIndex.Name AS IndexName,
Columns.name AS ColumnName
FROM sys.indexes MyIndex
INNER JOIN sys.index_columns IndexColumns
ON MyIndex.index_id = IndexColumns.index_id
AND MyIndex.object_id = IndexColumns.object_id
INNER JOIN sys.columns Columns
ON Columns.column_id = IndexColumns.column_id
AND IndexColumns.object_id = Columns.object_id
WHERE Columns.name = 'ColumnName'
AND MyIndex.Name='IX_MyIndexName'
)
4
Merci pour votre aide, éd. Voici la solution que j'ai écrite en utilisant le vôtre comme un début. Cela a été vérifié. Fondamentalement, il a toutes les bonnes jointures.
IF EXISTS
(
SELECT i.Name AS IndexName, c.Name AS ColumnName
FROM sys.indexes i
JOIN sys.index_columns ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
JOIN sys.columns c
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE c.Name = 'MyColumnName' AND i.Name='MyIndexName'
)
Questions connexes
- 1. TSQL - Comment utiliser une instruction case pour 2 colonnes?
- 2. Comment est-ce que je peux utiliser l'argument% dans a: conditions pour ActiveRecord.find?
- 3. Comment puis-je utiliser TSQL pour vérifier quand le mot de passe d'un utilisateur expirera?
- 4. TSQL - Somme une requête union
- 5. Est-ce que quelqu'un a un widget de visualisation pratique que je peux utiliser pour un projet web?
- 6. Index pour plusieurs colonnes dans ActiveRecord
- 7. Je ne peux pas lire ma propre sérialisation .NET
- 8. Existe-t-il une API que je peux utiliser pour dupliquer la fonctionnalité "Lieux" d'iPhoto '09?
- 9. Existe-t-il un package php que je peux utiliser pour gérer les demandes de programme?
- 10. Existe-t-il une requête SQL que je peux utiliser pour migrer des données d'une colonne "Image" vers une colonne "FileStream"?
- 11. Question MySQL: Index sur les colonnes!
- 12. Existe-t-il un attribut que je peux utiliser sur une propriété pour indiquer à DataGridView comment formater la colonne?
- 13. Constantes TSQL ... Utiliser une variable ou une valeur littérale?
- 14. Performance des index MySQL multi-colonnes en utilisant une seule colonne dans une requête
- 15. Quelles sont les bonnes ressources pour apprendre à utiliser NAnt?
- 16. multi-colonnes ou une colonne par index?
- 17. Comment utiliser les index dans SQL
- 18. Un index multi-colonnes fonctionne-t-il également pour les sélections sur une seule colonne?
- 19. TSQL - Plan d'exécution d'analyse pour déterminer les colonnes à renvoyer par une procédure stockée
- 20. Y at-il un contrôle WPF que je peux utiliser pour développer/réduire des panneaux (animés)
- 21. Comment puis-je réécrire cette requête SQL complexe pour ne pas utiliser une sous-requête pour les vues MySQL?
- 22. Puis-je utiliser urllib pour soumettre une requête SOAP?
- 23. Quelle est la quantité maximale de RAM que je peux utiliser dans une boîte Windows?
- 24. Plugin pour utiliser son propre app.config
- 25. SQL: que font exactement les clés primaires et les index?
- 26. Comment convertir un NSString en quelque chose que je peux utiliser avec FSCreateDirectoryUnicode?
- 27. UIView. Quelles sont les dimensions maximales des limites que je peux utiliser?
- 28. Requête MySQL lente. Que devrais-je indexer?
- 29. Tracer les colonnes dans les mesures calculées
- 30. Méthode efficace pour vérifier si DataTable a une ligne
J'ai corrigé ma réponse pour inclure cette autre condition de jointure. Je suis content que je puisse être utile. Vous pourriez envisager de marquer votre ou ma réponse comme correcte. –