Wyszukiwarka Google ujawniła miliony trafień dotyczących wyszukiwania tabel bez indeksowania klastrowego, przy czym PK zwykle jest indeksem klastrowym tabeli. Jednak tabela może łatwo mieć naturalny klucz jako indeks klastrowany i nieklastrowy indeks zastępczy, jak kolumna tożsamości.
Jak znaleźć wszystkie tabele w bazie danych bez zdefiniowanego klucza podstawowego? Mam w tej bazie danych 245 tabel: kontrola manualna jest rażąco nieefektywna.
sys.tables
sam daje identyfikator i dziękuję za pokazanie tej cudownej funkcji.objectproperty()
jest dostępny od 2005 roku, właśnie sprawdziłem bol, prawda?Rozwiązanie Mike'a doskonale nadaje się do konkretnego problemu.
Jeśli chcesz więcej elastyczności, oto alternatywa, która może być łatwo przekształcił kwerendę, która zwraca inne informacje, takie jak znalezienie wszystkich tabel, które są hałdy, lub znalezienie tabel, które nie mają unikalne ograniczeń w ogóle .
Gdy twój (pod) system przejdzie ponad ~ 50 tabel, bardzo ważne jest zapoznanie się ze wszystkimi tabelami metadanych, ponieważ, jak powiedziałeś, ręczne przeglądanie każdej tabeli jest niepraktyczne (i podatne na błędy!).
źródło
Funkcja zarządzania zasadami w SQL Server może to zrobić.
Aspekt tabeli zawiera pola @HasIndex i @HasClusteredIndex (a także inne, które mogą być przydatne, np. Wyzwalacze). Można utworzyć zasadę sprawdzającą warunki na wszystkich tabelach, we wszystkich bazach danych, na wielu serwerach (przy użyciu funkcji Central Management Server).
Nie może jednak sprawdzić istnienia indeksu klucza podstawowego lub ograniczenia. Przysiągłbym, że istnieje pole @HasPrimaryKey, ale nie ma go w MSSQL2012. Albo źle pamiętam, albo wariuję.
Uwaga: Zarządzanie zasadami jest dołączone do wersji SQL Server 2012 Enterprise, Business Intelligence i Standard. Nie jest dostępny w wersji Express.
źródło