Często istnieje wiele sposobów na zrobienie tego samego (lub podobnego) w SQL Server. Przykładem jest pobranie wszystkich kluczy głównych z bazy danych (lub nawet tylko klucza podstawowego dla danej tabeli).
W tym artykule przedstawiono jedenaście różnych podejść do pobierania informacji o kluczu podstawowym w programie SQL Server.
Niektóre z nich będą bardziej przydatne niż inne, w zależności od konkretnej sytuacji.
Przykład 1 – Procedura przechowywana w systemie sp_pkeys
Jeśli potrzebujesz tylko klucza podstawowego dla danej tabeli, sp_pkeys
systemowa procedura składowana jest prawdopodobnie najszybszym i najłatwiejszym sposobem wykonania tego. Aby to zrobić, po prostu przekaż nazwę tabeli do procedury.
Tak:
EXEC sp_pkeys Artists;
Wynik (przy użyciu wyjścia pionowego):
TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistId KEY_SEQ | 1 PK_NAME | PK__Artists__25706B50FCD918B1
W tym przypadku poprosiłem o klucz podstawowy od Artystów stół. Zwraca nazwę klucza podstawowego ( PK__Artists__25706B50FCD918B1 ), nazwa bazy danych ( Muzyka ), nazwa tabeli, nazwa kolumny ( ArtistId ) oraz inne informacje.
Alternatywnie mógłbym wyraźnie określić wszystkie argumenty, aby uzyskać ten sam wynik:
EXEC sp_pkeys @table_name = Artists, @table_owner = dbo, @table_qualifier = Music;
Przykład 2 – Widok systemowy KEY_COLUMN_USAGE
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
widok systemowy zwraca jeden wiersz dla każdej kolumny, która jest ograniczona jako klucz w bieżącej bazie danych. W związku z tym otrzymasz również klucze obce zwrócone w tym widoku.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
Wynik:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Widzimy, że zwraca to ograniczenia ze wszystkich tabel. Możemy również dodać WHERE
klauzula, aby zawęzić wyniki do określonej tabeli.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Artists';
Wynik:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | +--------------+---------------+-------------------------------+
W tych przykładach zawęziłem wyniki tylko do tych kolumn widoku, który mnie interesuje, ale możesz również użyć gwiazdki (*
) symbol wieloznaczny, aby zwrócić wszystkie kolumny.
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Artists';
Wynik (przy użyciu wyjścia pionowego):
CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1 TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistId ORDINAL_POSITION | 1
Przykład 3 – Widok systemowy CONSTRAINT_COLUMN_USAGE
Jest to podobne do poprzedniego przykładu. INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
widok systemowy zwraca jeden wiersz dla każdej kolumny w bieżącej bazie danych, która ma zdefiniowane ograniczenie dla kolumny. Tak jak w przypadku INFORMATION_SCHEMA.KEY_COLUMN_USAGE
otrzymasz również klucze obce zwrócone z tym widokiem. Jednak INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
nie ogranicza się tylko do kluczowych ograniczeń.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;
Wynik:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Możesz użyć WHERE
klauzula zwracająca tylko określoną tabelę lub kolumnę:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE COLUMN_NAME = 'ArtistId';
Wynik:
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | +--------------+---------------+-------------------------------+
W tym przypadku określiłem nazwę kolumny, więc zwróciło wszystkie ograniczenia dotyczące kolumn o tej nazwie. Jak się okazuje, baza danych używa tej samej nazwy kolumny w dwóch różnych tabelach. Jeden ma ograniczenie klucza obcego, drugi klucz podstawowy. Dlatego zwracane są oba wiersze.
Ponownie możesz użyć gwiazdki (*
) symbol wieloznaczny, aby zwrócić wszystkie kolumny.
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = 'Artists';
Wynik (przy użyciu wyjścia pionowego):
TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1
W tym przykładzie ograniczyłem dane wyjściowe do ograniczeń dotyczących określonej tabeli.
Przykład 4 – Widok systemu CONSTRAINT_TABLE_USAGE
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
widok systemowy zwraca jeden wiersz dla każdej tabeli w bieżącej bazie danych, która ma zdefiniowane ograniczenie dla tabeli.
SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;
Wynik:
+--------------+-------------------------------+ | TABLE_NAME | CONSTRAINT_NAME | |--------------+-------------------------------| | Artists | PK__Artists__25706B50FCD918B1 | | Genres | PK__Genres__0385057E88BB96F8 | | Albums | PK__Albums__97B4BE379FC780BD | | Albums | FK_Albums_Artists | | Albums | FK_Albums_Genres | +--------------+-------------------------------+
Ten widok nie zwraca nazw kolumn, w których są używane ograniczenia, więc może nie być dla Ciebie tak przydatny, w zależności od Twoich wymagań.
Oto przykład, który pokazuje wszystkie dane zwrócone przez ten widok dla Gatunków tabela:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_NAME = 'Genres';
Wynik:
TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Genres CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Genres__0385057E88BB96F8
Przykład 5 – Widok systemowy TABLE_CONSTRAINTS
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
widok systemowy zwraca jeden wiersz dla każdego ograniczenia tabeli w bieżącej bazie danych.
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Wynik:
+--------------+-------------------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------------------+-------------------| | Artists | PK__Artists__25706B50FCD918B1 | PRIMARY KEY | | Genres | PK__Genres__0385057E88BB96F8 | PRIMARY KEY | | Albums | PK__Albums__97B4BE379FC780BD | PRIMARY KEY | | Albums | FK_Albums_Artists | FOREIGN KEY | | Albums | FK_Albums_Genres | FOREIGN KEY | +--------------+-------------------------------+-------------------+
Ten widok nie zawiera nazwy kolumny, ale zapewnia typ ograniczenia. Dlatego możesz zawęzić wyniki tylko do kluczy podstawowych:
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY';
Wynik:
+--------------+-------------------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------------------+-------------------| | Artists | PK__Artists__25706B50FCD918B1 | PRIMARY KEY | | Genres | PK__Genres__0385057E88BB96F8 | PRIMARY KEY | | Albums | PK__Albums__97B4BE379FC780BD | PRIMARY KEY | +--------------+-------------------------------+-------------------+
Oto przykład, który używa symbolu wieloznacznego (*
), aby zwrócić wszystkie dane dotyczące ograniczeń
Wykonawców
tabela:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Artists';
Wynik:
CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1 TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Artists CONSTRAINT_TYPE | PRIMARY KEY IS_DEFERRABLE | NO INITIALLY_DEFERRED | NO
Przykład 6 – Widok systemu key_constraints
sys.key_constraints
widok systemowy zawiera wiersz dla każdego obiektu, który jest kluczem podstawowym lub ograniczeniem przez unikalność. Dlatego możemy użyć następującego kodu, aby zwrócić wszystkie ograniczenia klucza podstawowego w bazie danych, wraz z odpowiednią tabelą dla każdego klucza podstawowego:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name FROM sys.key_constraints WHERE type = 'PK';
Wynik:
+---------+-------------------------------+ | Table | name | |---------+-------------------------------| | Artists | PK__Artists__25706B50FCD918B1 | | Genres | PK__Genres__0385057E88BB96F8 | | Albums | PK__Albums__97B4BE379FC780BD | +---------+-------------------------------+
Oczywiście możesz usunąć WHERE
klauzula zwracająca oba klucze podstawowe i unikalne klucze.
W poprzednim przykładzie użyto OBJECT_NAME()
funkcja zwraca nazwę tabeli nadrzędnej, a nie jej identyfikator_obiektu. Gdybym nie użył OBJECT_NAME()
funkcja, wynik wyglądałby tak:
SELECT parent_object_id, name FROM sys.key_constraints WHERE type = 'PK';
Wynik:
+--------------------+-------------------------------+ | parent_object_id | name | |--------------------+-------------------------------| | 885578193 | PK__Artists__25706B50FCD918B1 | | 917578307 | PK__Genres__0385057E88BB96F8 | | 949578421 | PK__Albums__97B4BE379FC780BD | +--------------------+-------------------------------+
parent_object_id
jest zwracana zamiast nazwy obiektu nadrzędnego. OBJECT_NAME()
funkcja znacznie ułatwia nam zrozumienie, do której tabeli zastosowano każdy klawisz.
Oto przykład, w którym używam symbolu wieloznacznego (*
), aby zwrócić wszystkie kolumny dla klucza podstawowego w
Albumach
tabela:
SELECT * FROM sys.key_constraints WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = 'Albums';
Wynik:
name | PK__Albums__97B4BE379FC780BD object_id | 965578478 principal_id | NULL schema_id | 1 parent_object_id | 949578421 type | PK type_desc | PRIMARY_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.377 modify_date | 2019-05-02 12:56:06.377 is_ms_shipped | 0 is_published | 0 is_schema_published | 0 unique_index_id | 1 is_system_named | 1 is_enforced | 1
Przykład 7 – Widok systemu sys.objects
sys.objects
widok systemowy zawiera wiersz dla każdego zdefiniowanego przez użytkownika obiektu o zakresie schematu, który jest tworzony w bazie danych. Zawiera więc nasze tabele i klucze podstawowe.
Możemy wziąć poprzednie zapytanie i zastąpić key_constraints
z objects
i otrzymamy ten sam wynik:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name FROM sys.objects WHERE type = 'PK';
Wynik:
+---------+-------------------------------+ | Table | name | |---------+-------------------------------| | Artists | PK__Artists__25706B50FCD918B1 | | Genres | PK__Genres__0385057E88BB96F8 | | Albums | PK__Albums__97B4BE379FC780BD | +---------+-------------------------------+
Oto przykład, który zwraca wszystkie dane dla PK__Genres__0385057E88BB96F8 klucz główny:
SELECT * FROM sys.objects WHERE name = 'PK__Genres__0385057E88BB96F8';
Wynik (przy użyciu wyjścia pionowego):
name | PK__Genres__0385057E88BB96F8 object_id | 933578364 principal_id | NULL schema_id | 1 parent_object_id | 917578307 type | PK type_desc | PRIMARY_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.110 modify_date | 2019-05-02 12:56:06.110 is_ms_shipped | 0 is_published | 0 is_schema_published | 0
Przykład 8 – Widok systemu REFERENTIAL_CONSTRAINTS
To trochę naciągane, ale może być przydatne w zależności od twojej sytuacji. Z technicznego punktu widzenia zwraca (niektóre) klucze podstawowe.
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
widok systemowy zwraca jeden wiersz dla każdego FOREIGN KEY
ograniczenie w bieżącej bazie danych. Tak więc jego celem jest tak naprawdę zwrócenie kluczy obcych, a nie kluczy podstawowych. Jednak ten widok może być przydatny, jeśli chcesz zobaczyć tylko wszystkie klucze podstawowe, które mają skojarzony klucz obcy. Nie jest to niezawodna metoda, jeśli chcesz zobaczyć wszystkie klucze podstawowe, niezależnie od tego, czy istnieje powiązany klucz obcy.
Oto przykład:
SELECT CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
Wynik:
+-------------------+-------------------------------+ | CONSTRAINT_NAME | UNIQUE_CONSTRAINT_NAME | |-------------------+-------------------------------| | FK_Albums_Artists | PK__Artists__25706B50FCD918B1 | | FK_Albums_Genres | PK__Genres__0385057E88BB96F8 | +-------------------+-------------------------------+
Jak widać, zwraca to tylko te klucze podstawowe, które mają skojarzony klucz obcy. Aby być bardziej precyzyjnym, w rzeczywistości jest odwrotnie – zwraca wszystkie klucze obce wraz z powiązanym z nimi UNIQUE
ograniczenie.
Jeśli więc porównamy te wyniki z wynikami z poprzednich przykładów, zobaczymy, że zwracane są tylko dwa klucze podstawowe (w porównaniu z trzema z poprzednich przykładów). Dzieje się tak, ponieważ jeden z kluczy podstawowych w tej bazie danych ( PK__Albums__97B4BE379FC780BD ) nie ma skojarzonego klucza obcego.
Oto przykład, który zwraca wszystkie dane dla kluczy obcych, z których
PK__Artists__25706B50FCD918B1
jest UNIQUE
ograniczenie:
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE UNIQUE_CONSTRAINT_NAME = 'PK__Artists__25706B50FCD918B1';
Wynik:
CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists UNIQUE_CONSTRAINT_CATALOG | Music UNIQUE_CONSTRAINT_SCHEMA | dbo UNIQUE_CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1 MATCH_OPTION | SIMPLE UPDATE_RULE | NO ACTION DELETE_RULE | NO ACTION
W takim przypadku zwracany jest tylko jeden klucz obcy.
Jak wspomniano, ten widok służy głównie do zwracania informacji o kluczu obcym, więc używaj tej metody tylko wtedy, gdy chcesz zobaczyć informacje o kluczu obcym wraz z powiązanym kluczem podstawowym. Nie używaj tej metody, jeśli chcesz zobaczyć wszystkie klucze podstawowe, niezależnie od tego, czy mają skojarzony klucz obcy.
Przykład 9 — Procedura przechowywana w systemie sp_fkeys
Ta metoda jest podobna do poprzedniej metody, w tym sensie, że zwraca informacje o kluczu obcym. Zwraca również klucz podstawowy powiązany z każdym kluczem obcym.
Przykład:
EXEC sp_fkeys Artists;
Wynik (przy użyciu wyjścia pionowego):
PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Artists PKCOLUMN_NAME | ArtistId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | ArtistId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Artists PK_NAME | PK__Artists__25706B50FCD918B1 DEFERRABILITY | 7
Mogłem zamiast tego użyć następującej składni (lub kombinacji tych argumentów):
EXEC sp_fkeys @pktable_name = Artists, @pktable_owner = dbo, @pktable_qualifier = Music, @fktable_name = Albums, @fktable_owner = dbo, @fktable_qualifier = Music;
Podobnie jak w poprzednim przykładzie, ta metoda nie powinna polegać na zwróceniu wszystkich kluczy podstawowych. Jeśli klucz podstawowy nie ma skojarzonego klucza obcego, nie zostanie zwrócony.
Przykład 10 – Procedura przechowywana w systemie sp_helpconstraint
sp_helpconstraint
systemowa procedura składowana zwraca listę wszystkich typów ograniczeń, ich nazwę zdefiniowaną przez użytkownika lub dostarczoną przez system, kolumny, w których zostały one zdefiniowane, oraz wyrażenie definiujące ograniczenie (dla DEFAULT
i CHECK
tylko ograniczenia).
Dlatego możesz go użyć do zwrócenia informacji o kluczach głównych w swojej bazie danych.
Przykład:
EXEC sp_helpconstraint Albums;
Wynik:
+---------------+ | Object Name | |---------------| | Albums | +---------------+ -[ RECORD 1 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Artists delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | ArtistId -[ RECORD 2 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Artists (ArtistId) -[ RECORD 3 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Genres delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | GenreId -[ RECORD 4 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Genres (GenreId) -[ RECORD 5 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Albums__97B4BE379FC780BD delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | AlbumId
Przykład 11 – Procedura przechowywana w systemie sp_help
sp_help
systemowa procedura składowana zgłasza informacje o obiekcie bazy danych (dowolny obiekt wymieniony w sys.sysobjects
widok zgodności), typ danych zdefiniowany przez użytkownika lub typ danych. Obejmuje to informacje o kluczach podstawowych.
Kiedy uruchamiasz to bez żadnych argumentów, dostarcza informacji o podsumowaniu informacji o obiektach wszystkich typów, które istnieją w bieżącej bazie danych (tj. dużo informacji).
Możesz jednak podać nazwę tabeli, która zwróci informacje o tej tabeli. Ponownie otrzymasz wiele informacji zwróconych, ale wśród nich będą informacje o podstawowym kluczu.
Przykład:
EXEC sp_help Artists;
Wynik:
+---------+---------+------------+-------------------------+ | Name | Owner | Type | Created_datetime | |---------+---------+------------+-------------------------| | Artists | dbo | user table | 2019-05-02 12:56:05.840 | +---------+---------+------------+-------------------------+ -[ RECORD 1 ]------------------------- Column_name | ArtistId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 2 ]------------------------- Column_name | ArtistName Type | nvarchar Computed | no Length | 510 Prec | Scale | Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | SQL_Latin1_General_CP1_CI_AS -[ RECORD 3 ]------------------------- Column_name | ActiveFrom Type | date Computed | no Length | 3 Prec | 10 Scale | 0 Nullable | yes TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL +------------+--------+-------------+-----------------------+ | Identity | Seed | Increment | Not For Replication | |------------+--------+-------------+-----------------------| | ArtistId | 1 | 1 | 0 | +------------+--------+-------------+-----------------------+ +-------------------------------+ | RowGuidCol | |-------------------------------| | No rowguidcol column defined. | +-------------------------------+ +-----------------------------+ | Data_located_on_filegroup | |-----------------------------| | PRIMARY | +-----------------------------+ +-------------------------------+---------------------------------------------------+--------------+ | index_name | index_description | index_keys | |-------------------------------+---------------------------------------------------+--------------| | PK__Artists__25706B50FCD918B1 | clustered, unique, primary key located on PRIMARY | ArtistId | +-------------------------------+---------------------------------------------------+--------------+ -[ RECORD 1 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Artists__25706B50FCD918B1 delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | ArtistId +--------------------------------------+ | Table is referenced by foreign key | |--------------------------------------| | Music.dbo.Albums: FK_Albums_Artists | +--------------------------------------+
Możesz również podać nazwę klucza podstawowego, aby uzyskać podstawowe informacje na jego temat:
EXEC sp_help PK__Artists__25706B50FCD918B1;
Wynik:
+-------------------------------+---------+-----------------+-------------------------+ | Name | Owner | Type | Created_datetime | |-------------------------------+---------+-----------------+-------------------------| | PK__Artists__25706B50FCD918B1 | dbo | primary key cns | 2019-05-02 12:56:05.853 | +-------------------------------+---------+-----------------+-------------------------+