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

11 sposobów na odzyskanie klucza podstawowego w SQL Server (przykłady T-SQL)

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 |
+-------------------------------+---------+-----------------+-------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie analizatora obciążenia w celu mapowania wąskich gardeł wydajności

  2. Zmień format daty dla bieżącej sesji w SQL Server

  3. Jak tworzyć historię LUB widoki audytu z tabel zmiany przechwytywania danych (CDC) w programie SQL Server — samouczek dotyczący programu SQL Server

  4. Jak utworzyć skrót do SSMS i automatycznie połączyć się z domyślnym serwerem SQL — SQ:Samouczek dotyczący serwera / TSQL, część 4

  5. CONVERT() w SQL Server