Une recherche Google a généré des millions de visites sur la façon de trouver des tables sans indexation en cluster, le PK étant normalement l'index en cluster d'une table. Cependant, une table peut facilement avoir une clé naturelle comme index cluster et un index de substitution non cluster, comme une colonne d'identité.
Comment puis-je trouver toutes les tables dans une base de données sans clé primaire définie? J'ai 245 tableaux dans ce DB: l'inspection manuelle est extrêmement inefficace.
sys.tables
lui - même donne l'identifiant et merci d'avoir montré cette merveilleuse fonction.objectproperty()
.La solution de Mike est excellente pour le problème spécifique.
Si vous voulez plus de flexibilité, voici une alternative qui peut être facilement transformé en une requête qui retourne d' autres informations, telles que trouver toutes les tables qui sont des tas, ou de trouver des tables dépourvues de contraintes uniques du tout .
Une fois que votre (sous-) système dépasse ~ 50 tables, il est vraiment important de vous familiariser avec toutes les tables de métadonnées, car comme vous l'avez dit, parcourir chaque table manuellement n'est pas pratique (et sujet à erreur!).
la source
La fonctionnalité de gestion des stratégies de SQL Server peut effectuer certaines de ces opérations.
La facette Table contient les champs @HasIndex et @HasClusteredIndex (ainsi que d'autres qui peuvent être utiles, comme les déclencheurs). Une stratégie peut être créée pour vérifier les conditions sur toutes les tables, dans toutes les bases de données, sur un certain nombre de serveurs (à l'aide de la fonction Central Management Server).
Il ne peut cependant pas vérifier l'existence d'un index ou d'une contrainte de clé primaire. J'aurais juré qu'il y avait un champ @HasPrimaryKey mais il n'est pas là dans MSSQL2012. Soit je me souviens mal, soit je deviens fou.
Remarque: la gestion des stratégies est incluse dans les éditions SQL Server 2012 Enterprise, Business Intelligence et Standard. Il n'est pas disponible dans l'édition Express.
la source