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

11 sposobów zwracania kluczy obcych w bazie danych SQL Server za pomocą T-SQL

W tym artykule przedstawiono jedenaście różnych podejść do pobierania informacji o kluczu obcym w SQL Server. Niektóre z nich będą bardziej przydatne niż inne, w zależności od sytuacji.

Niektóre z tych metod można zmodyfikować, aby zwrócić dalsze informacje. Na przykład możesz wykonać sprzężenia w różnych widokach systemowych, aby zwrócić więcej danych.

Przykład 1 – Procedura przechowywana w systemie sp_fkeys

sp_fkeys systemowa procedura składowana zwraca informacje o logicznym kluczu obcym dla bieżącego środowiska. Pokazuje relacje kluczy obcych, w tym wyłączone klucze obce.

Ta procedura składowana jest idealna, gdy potrzebne są informacje o kluczu obcym dla określonej tabeli. Po prostu przekazujesz nazwę tabeli kluczy podstawowych lub obcych do procedury, a ona zwróci odpowiednie informacje.

Przykład:

EXEC sp_fkeys @fktable_name = Albums;

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
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
-[ RECORD 2 ]-------------------------
PKTABLE_QUALIFIER | Music
PKTABLE_OWNER     | dbo
PKTABLE_NAME      | Genres
PKCOLUMN_NAME     | GenreId
FKTABLE_QUALIFIER | Music
FKTABLE_OWNER     | dbo
FKTABLE_NAME      | Albums
FKCOLUMN_NAME     | GenreId
KEY_SEQ           | 1
UPDATE_RULE       | 1
DELETE_RULE       | 1
FK_NAME           | FK_Albums_Genres
PK_NAME           | PK__Genres__0385057E88BB96F8
DEFERRABILITY     | 7

Innym sposobem użycia tego widoku jest podanie nazwy tabeli kluczy podstawowych:

EXEC sp_fkeys @pktable_name = Artists;

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
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

Możesz także użyć innych argumentów, takich jak właściciel tabeli i kwalifikator tabeli:

EXEC sp_fkeys 
  @pktable_name = Artists,
  @pktable_owner = dbo,
  @pktable_qualifier = Music,
  @fktable_name = Albums,
  @fktable_owner = dbo,
  @fktable_qualifier = Music;

Przykład 2 – Widok systemu REFERENTIAL_CONSTRAINTS

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS widok systemowy zwraca jeden wiersz dla każdego FOREIGN KEY ograniczenie w bieżącej bazie danych.

Jest to idealne rozwiązanie do szybkiego zwracania listy kluczy obcych w bazie danych wraz z powiązanym ograniczeniem unikatowości. Nie jesteś ograniczony tylko do jednej tabeli, jak w poprzednim przykładzie.

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

W tym przypadku możemy zobaczyć każdy klucz obcy w bieżącej bazie danych, wraz z powiązanym kluczem podstawowym.

Jak się okazuje, ta baza danych ma tylko dwa klucze obce i są to te same, które widzieliśmy w poprzednim przykładzie.

Oto przykład, który zwraca wszystkie dane dla FK_Albums_Artists klucz obcy:

SELECT *
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'FK_Albums_Artists';

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

Zauważysz, że ta metoda nie dostarcza szczegółów tabeli kluczy podstawowych i obcych, które otrzymujesz w poprzedniej metodzie, więc będziesz musiał wykonać kilka złączeń z innymi widokami, jeśli potrzebujesz tych informacji (lub użyj jednej z metod poniżej).

Przykład 3 – 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.

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 wszystkie ograniczenia, w tym klucze podstawowe.

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 = 'Albums';

Wynik:

+--------------+---------------+------------------------------+
| TABLE_NAME   | COLUMN_NAME   | CONSTRAINT_NAME              |
|--------------+---------------+------------------------------|
| Albums       | ArtistId      | FK_Albums_Artists            |
| Albums       | GenreId       | FK_Albums_Genres             |
| Albums       | AlbumId       | PK__Albums__97B4BE379FC780BD |
+--------------+---------------+------------------------------+

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 = 'Albums';

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Artists
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | ArtistId
ORDINAL_POSITION   | 1
-[ RECORD 2 ]-------------------------
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Genres
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | GenreId
ORDINAL_POSITION   | 1
-[ RECORD 3 ]-------------------------
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | PK__Albums__97B4BE379FC780BD
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | AlbumId
ORDINAL_POSITION   | 1

Przykład 4 – 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 podstawowe 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.

Oto przykład, w którym zwracam wszystkie dane dla określonej tabeli:

SELECT *
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE TABLE_NAME = 'Albums';

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | ArtistId
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Artists
-[ RECORD 2 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | GenreId
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Genres
-[ RECORD 3 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
COLUMN_NAME        | AlbumId
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | PK__Albums__97B4BE379FC780BD

Przykład 5 – 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 Albumów tabela:

SELECT * 
FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
WHERE TABLE_NAME = 'Albums';

Wynik:

-[ RECORD 1 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | PK__Albums__97B4BE379FC780BD
-[ RECORD 2 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Artists
-[ RECORD 3 ]-------------------------
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Genres

Przykład 6 – 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 obcych:

SELECT 
  TABLE_NAME,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';

Wynik:

+--------------+-------------------+-------------------+
| TABLE_NAME   | CONSTRAINT_NAME   | CONSTRAINT_TYPE   |
|--------------+-------------------+-------------------|
| Albums       | FK_Albums_Artists | FOREIGN KEY       |
| Albums       | FK_Albums_Genres  | FOREIGN KEY       |
+--------------+-------------------+-------------------+

Oto przykład, który używa symbolu wieloznacznego (* ), aby zwrócić wszystkie dane dla ograniczeń klucza obcego zastosowanych do Albumów tabela:

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'Albums'
AND CONSTRAINT_TYPE = 'FOREIGN KEY';

Wynik:

-[ RECORD 1 ]-------------------------
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Artists
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
CONSTRAINT_TYPE    | FOREIGN KEY
IS_DEFERRABLE      | NO
INITIALLY_DEFERRED | NO
-[ RECORD 2 ]-------------------------
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | FK_Albums_Genres
TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Albums
CONSTRAINT_TYPE    | FOREIGN KEY
IS_DEFERRABLE      | NO
INITIALLY_DEFERRED | NO

Przykład 7 – Widok systemu sys.foreign_keys

sys.foreign_keys widok systemowy zawiera wiersz na obiekt, który jest FOREIGN KEY ograniczenie, z sys.object.type = F („F” oznacza „klucz obcy”).

Przykład:

SELECT 
  name AS 'Constraint',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Column'
FROM sys.foreign_keys;

Wynik:

+-------------------+---------+---------------------+
| Constraint        | Table   | Referenced Column   |
|-------------------+---------+---------------------|
| FK_Albums_Artists | Albums  | Artists             |
| FK_Albums_Genres  | Albums  | Genres              |
+-------------------+---------+---------------------+

Tutaj jest podczas zwracania wszystkich danych dla FK_Albums_Artists klucz obcy:

SELECT * FROM sys.foreign_keys
WHERE name = 'FK_Albums_Artists';

Wynik:

name                           | FK_Albums_Artists
object_id                      | 981578535
principal_id                   | NULL
schema_id                      | 1
parent_object_id               | 949578421
type                           | F 
type_desc                      | FOREIGN_KEY_CONSTRAINT
create_date                    | 2019-05-02 12:56:06.380
modify_date                    | 2019-05-02 12:56:06.380
is_ms_shipped                  | 0
is_published                   | 0
is_schema_published            | 0
referenced_object_id           | 885578193
key_index_id                   | 1
is_disabled                    | 0
is_not_for_replication         | 0
is_not_trusted                 | 0
delete_referential_action      | 0
delete_referential_action_desc | NO_ACTION
update_referential_action      | 0
update_referential_action_desc | NO_ACTION
is_system_named                | 0

Przykład 8 – Widok systemu sys.foreign_key_columns

sys.foreign_key_columns widok systemowy zawiera wiersz dla każdej kolumny lub zestaw kolumn, które składają się na klucz obcy.

Przykład:

SELECT 
   OBJECT_NAME(constraint_object_id) AS 'Foreign Key',
   OBJECT_NAME(parent_object_id) AS 'Table',
   OBJECT_NAME(referenced_object_id) AS 'Referenced Table'
FROM sys.foreign_key_columns;

Wynik:

+--------------------+---------+--------------------+
| Foreign Key        | Table   | Referenced Table   |
|--------------------+---------+--------------------|
| FK_Albums_Artists  | Albums  | Artists            |
| FK_Albums_Genres   | Albums  | Genres             |
| FK_Artists_Country | Artists | Country            |
+--------------------+---------+--------------------+

I tutaj jest podczas zwracania wszystkich danych dla FK_Albums_Artists klucz obcy:

SELECT * FROM sys.foreign_key_columns
WHERE OBJECT_NAME(constraint_object_id) = 'FK_Albums_Artists';

Wynik:

constraint_object_id | 981578535
constraint_column_id | 1
parent_object_id     | 949578421
parent_column_id     | 4
referenced_object_id | 885578193
referenced_column_id | 1

Przykład 9 – 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 informacje o naszych kluczach obcych.

Przykład:

SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name
FROM sys.objects 
WHERE type = 'F';

Wynik:

+---------+-------------------+
| Table   | name              |
|---------+-------------------|
| Albums  | FK_Albums_Artists |
| Albums  | FK_Albums_Genres  |
+---------+-------------------+

W tym przykładzie zawęziłem wyniki tylko do kluczy obcych (wpisz F ).

Oto przykład, który zwraca wszystkie dane dla FK_Albums_Artists klucz obcy:

SELECT *
FROM sys.objects
WHERE name = 'FK_Albums_Artists';

Wynik (przy użyciu wyjścia pionowego):

-[ RECORD 1 ]-------------------------
name                | FK_Albums_Artists
object_id           | 981578535
principal_id        | NULL
schema_id           | 1
parent_object_id    | 949578421
type                | F 
type_desc           | FOREIGN_KEY_CONSTRAINT
create_date         | 2019-05-02 12:56:06.380
modify_date         | 2019-05-02 12:56:06.380
is_ms_shipped       | 0
is_published        | 0
is_schema_published | 0

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 obcych w Twojej 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 obcych.

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 kluczu obcym.

Przykład:

EXEC sp_help Albums;

Wynik:

+--------+---------+------------+-------------------------+
| Name   | Owner   | Type       | Created_datetime        |
|--------+---------+------------+-------------------------|
| Albums | dbo     | user table | 2019-05-02 12:56:06.370 |
+--------+---------+------------+-------------------------+
 
-[ RECORD 1 ]-------------------------
Column_name          | AlbumId
Type                 | int
Computed             | no
Length               | 4
Prec                 | 10   
Scale                | 0    
Nullable             | no
TrimTrailingBlanks   | (n/a)
FixedLenNullInSource | (n/a)
Collation            | NULL
-[ RECORD 2 ]-------------------------
Column_name          | AlbumName
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          | ReleaseDate
Type                 | date
Computed             | no
Length               | 3
Prec                 | 10   
Scale                | 0    
Nullable             | no
TrimTrailingBlanks   | (n/a)
FixedLenNullInSource | (n/a)
Collation            | NULL
-[ RECORD 4 ]-------------------------
Column_name          | ArtistId
Type                 | int
Computed             | no
Length               | 4
Prec                 | 10   
Scale                | 0    
Nullable             | no
TrimTrailingBlanks   | (n/a)
FixedLenNullInSource | (n/a)
Collation            | NULL
-[ RECORD 5 ]-------------------------
Column_name          | GenreId
Type                 | int
Computed             | no
Length               | 4
Prec                 | 10   
Scale                | 0    
Nullable             | no
TrimTrailingBlanks   | (n/a)
FixedLenNullInSource | (n/a)
Collation            | NULL
 
+------------+--------+-------------+-----------------------+
| Identity   | Seed   | Increment   | Not For Replication   |
|------------+--------+-------------+-----------------------|
| AlbumId    | 1      | 1           | 0                     |
+------------+--------+-------------+-----------------------+
 
+-------------------------------+
| RowGuidCol                    |
|-------------------------------|
| No rowguidcol column defined. |
+-------------------------------+
 
+-----------------------------+
| Data_located_on_filegroup   |
|-----------------------------|
| PRIMARY                     |
+-----------------------------+
 
+------------------------------+---------------------------------------------------+--------------+
| index_name                   | index_description                                 | index_keys   |
|------------------------------+---------------------------------------------------+--------------|
| PK__Albums__97B4BE379FC780BD | clustered, unique, primary key located on PRIMARY | AlbumId      |
+------------------------------+---------------------------------------------------+--------------+
 
-[ 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest impas w SQL Server?

  2. Dynamiczne maskowanie danych w SQL Server dla początkujących

  3. Instrukcja ALTER TABLE kolidowała z ograniczeniem CHECK w SQL Server - SQL Server / TSQL Tutorial Part 89

  4. SQL Server 2016:Przywracanie bazy danych

  5. Jak programowo utworzyć tabelę połączoną ODBC z widokiem SQL Server i czy można ją edytować?