Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

7 sposobów na zwrócenie wszystkich tabel z kluczem podstawowym w SQL Server

Jeśli kiedykolwiek będziesz musiał znaleźć wszystkie tabele, które mają klucz podstawowy w SQL Server, ten artykuł może pomóc.

W tym artykule przedstawiono siedem sposobów zwracania wszystkich tabel w bieżącej bazie danych, które mają klucz podstawowy.

Zauważ, że większość z tych przykładów zwraca tylko tabele – nie same klucze podstawowe. Jeśli chcesz uzyskać listę kluczy podstawowych, zobacz 11 sposobów na zwrócenie klucza głównego w SQL Server.

Opcja 1 – OBJECTPROPERTY() z sys.tables

Pierwsza opcja obejmuje użycie OBJECTPROPERTY() funkcja podczas odpytywania sys.tables widok systemu. Ta funkcja akceptuje TableHasPrimaryKey argument. Jeśli ten argument ma wartość 1 , otrzymujemy wszystkie tabele, które mają klucz podstawowy (jeśli jest to 0 wtedy otrzymujemy wszystkie tabele, które nie mają klucza podstawowego).

 SELECT SCHEMA_NAME (schema_id) AS [Schema], nazwa AS [Table] FROM sys.tablesWHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Table];

Wynik:

+----------+---------+| Schemat | Tabela ||----------+---------|| dbo | Albumy || dbo | Artyści || dbo | Kraj || dbo | Gatunki |+----------+---------+

W tym przykładzie bieżąca baza danych zawiera cztery tabele z kluczem podstawowym.

Pozostałe przykłady będą wysyłać zapytania do tej samej bazy danych, więc wyniki będą takie same dla tych zapytań.

Opcja 2 – OBJECTPROPERTY() z INFORMATION_SCHEMA.TABLES

W tym przykładzie użyto OBJECTPROPERTY() ponownie, ale tym razem pytam o INFORMATION_SCHEMA.TABLES widok.

SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME))),'TableHasPrimaryKey') =1 ANDTABLE_TYPE='BASE TABLE'ORDER BY TABLE_SCHEMA;
Wynik:

+----------------+--------------+| TABLE_SCHEMA | TABLE_NAME ||----------------+---------------|| dbo | Albumy || dbo | Artyści || dbo | Kraj || dbo | Gatunki |+----------------+--------------+

Opcja 3 – OBJECTPROPERTY() z sys.objects

Jeszcze raz OBJECTPROPERTY() przychodzi na ratunek. Tym razem pytam o sys.objects widok systemu.

 SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table]FROM sys.objects WHERE type ='U'AND OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', nazwa)), 'TableHasPrimaryKey ') =1ORDER BY [Schema], [Tabela]

Wynik:

+----------+---------+| Schemat | Tabela ||----------+---------|| dbo | Albumy || dbo | Artyści || dbo | Kraj || dbo | Gatunki |+----------+---------+

Opcja 4 – INFORMATION_SCHEMA.TABLE_CONSTRAINTS

Możesz zapytać o INFORMATION_SCHEMA.TABLE_CONSTRAINTS widok, aby uzyskać listę tabel z kluczami podstawowymi. Musisz filtrować wyniki tylko do tych wierszy, które mają CONSTRAINT_TYPE z PRIMARY KEY .

SELECT CONSTRAINT_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='KLUCZ PODSTAWOWY';

Wynik:

+---------------------+--------------+| CONSTRAINT_SCHEMA | TABLE_NAME ||---------------------+---------------|| dbo | Artyści || dbo | Gatunki || dbo | Albumy || dbo | Kraj |+---------------------+--------------+

Ten widok zwraca również nazwę ograniczenia, więc w razie potrzeby możesz również dołączyć tę kolumnę:

SELECT CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='KLUCZ PODSTAWOWY';

Wynik:

+----------+--------------+------------- -----------------------+| CONSTRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME ||----------+---------------+---------- ---------------------|| dbo | Artyści | PK__Artyści__25706B50FCD918B1 || dbo | Gatunki | PK__Gatunki__0385057E88BB96F8 || dbo | Albumy | PK__Albumy__97B4BE379FC780BD || dbo | Kraj | PK__Kraj__10D1609F97ADEC31 |+----------+-----------------+---------- ---------------------+

Opcja 5 – sys.key_constraints

Możesz filtrować sys.key_constraints wyświetl CONSTRAINT_TYPE z PK aby uzyskać listę tabel z kluczami podstawowymi.

 SELECT SCHEMA_NAME (schema_id) AS [Schema], OBJECT_NAME (parent_object_id) AS [Tabela] FROM sys.key_constraints WHERE type =„PK”;

Wynik:

+----------+---------+| Schemat | Tabela ||----------+---------|| dbo | Artyści || dbo | Gatunki || dbo | Albumy || dbo | Kraj |+----------+---------+

Oto znowu z nazwą klucza podstawowego:

 SELECT SCHEMA_NAME (schema_id) AS [Schema], OBJECT_NAME (parent_object_id) AS [Tabela], nameFROM sys.key_constraints WHERE type ='PK';

Wynik:

+-----------+---------+------------------------------ ------+| Schemat | Tabela | nazwa ||----------+------------+-------------------------- -----|| dbo | Artyści | PK__Artyści__25706B50FCD918B1 || dbo | Gatunki | PK__Gatunki__0385057E88BB96F8 || dbo | Albumy | PK__Albumy__97B4BE379FC780BD || dbo | Kraj | PK__Kraj__10D1609F97ADEC31 |+----------+-------------+-------------------------- -----+

Opcja 6 – sys.objects

sys.objects Widok systemowy jest popularnym sposobem zwracania informacji o obiektach o zakresie schematu, w tym o kluczach podstawowych.

 SELECT SCHEMA_NAME (schema_id) AS [Schema], OBJECT_NAME (parent_object_id) AS [Tabela] FROM sys.objects WHERE typ =„PK”;

Wynik:

+----------+---------+| Schemat | Tabela ||----------+---------|| dbo | Artyści || dbo | Gatunki || dbo | Albumy || dbo | Kraj |+----------+---------+

Podobnie jak w poprzednich dwóch przykładach, możemy dołączyć name kolumny tego widoku, aby wyświetlić nazwę klucza podstawowego:

 SELECT SCHEMA_NAME (schema_id) AS [Schema], OBJECT_NAME (parent_object_id) AS [Tabela], nameFROM sys.objects WHERE typ =„PK”;

Wynik:

+-----------+---------+------------------------------ ------+| Schemat | Tabela | nazwa ||----------+------------+-------------------------- -----|| dbo | Artyści | PK__Artyści__25706B50FCD918B1 || dbo | Gatunki | PK__Gatunki__0385057E88BB96F8 || dbo | Albumy | PK__Albumy__97B4BE379FC780BD || dbo | Kraj | PK__Kraj__10D1609F97ADEC31 |+----------+-------------+-------------------------- -----+

Opcja 7 – OBJECTPROPERTYEX()

OBJECTPROPERTYEX() funkcja działa tak samo jak OBJECTPROPERTY() funkcja, z wyjątkiem tego, że obsługuje więcej właściwości. Dlatego każdy z poprzednich przykładów, w których użyto OBJECTPROPERTY() , można łatwo przepisać, aby użyć OBJECTPROPERTYEX() .

Na przykład mógłbym przepisać pierwszy przykład na tej stronie w następujący sposób:

 SELECT SCHEMA_NAME (schema_id) AS [Schema], nazwa AS [Tabela] FROM sys.tablesWHERE OBJECTPROPERTYEX(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Tabela];

Wynik:

+----------+---------+| Schemat | Tabela ||----------+---------|| dbo | Albumy || dbo | Artyści || dbo | Kraj || dbo | Gatunki |+----------+---------+

Powinienem wspomnieć, że OBJECTPROPERTYEX() zwraca sql_variant typ danych, natomiast OBJECTPROPERTY() zwraca int .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy MS SQL Server między obejmuje granice zakresu?

  2. Operator XOR T-SQL

  3. 2 sposoby na uzyskanie domyślnego języka logowania w SQL Server (T-SQL)

  4. Sprawdź niewysłaną pocztę w SQL Server (T-SQL)

  5. Serwer SQL *=Operator?