Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

11 modi per restituire chiavi esterne in un database di SQL Server utilizzando T-SQL

Questo articolo presenta undici diversi approcci per recuperare le informazioni sulla chiave esterna in SQL Server. Alcuni di questi saranno più utili di altri, a seconda della situazione.

Alcuni di questi metodi possono essere modificati per restituire ulteriori informazioni. Ad esempio, puoi eseguire join su varie viste di sistema per restituire più dati.

Esempio 1:la stored procedure di sistema sp_fkeys

I sp_fkeys la procedura memorizzata di sistema restituisce informazioni sulla chiave esterna logica per l'ambiente corrente. Mostra le relazioni di chiavi esterne comprese le chiavi esterne disabilitate.

Questa procedura memorizzata è ideale quando sono necessarie informazioni sulla chiave esterna per una tabella specifica. Devi semplicemente passare il nome della tabella della chiave primaria o esterna alla procedura e questa restituirà le informazioni pertinenti.

Esempio:

EXEC sp_fkeys @fktable_name = Albums;

Risultato (usando l'output verticale):

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

Un altro modo per utilizzare questa vista è fornire il nome della tabella delle chiavi primarie:

EXEC sp_fkeys @pktable_name = Artists;

Risultato (usando l'output verticale):

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

Puoi anche utilizzare altri argomenti, come il proprietario della tabella e il qualificatore della tabella:

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

Esempio 2 – Vista del sistema REFERENTIAL_CONSTRAINTS

Il INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS la vista di sistema restituisce una riga per ogni FOREIGN KEY vincolo nel database corrente.

Questo è l'ideale per restituire rapidamente un elenco di chiavi esterne nel database insieme al vincolo univoco associato. Non sei limitato a una sola tabella come nell'esempio precedente.

Ecco un esempio:

SELECT 
    CONSTRAINT_NAME,
    UNIQUE_CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;

Risultato:

+-------------------+-------------------------------+
| CONSTRAINT_NAME   | UNIQUE_CONSTRAINT_NAME        |
|-------------------+-------------------------------|
| FK_Albums_Artists | PK__Artists__25706B50FCD918B1 |
| FK_Albums_Genres  | PK__Genres__0385057E88BB96F8  |
+-------------------+-------------------------------+

Quindi in questo caso possiamo vedere ogni chiave esterna nel database corrente, insieme alla sua chiave primaria associata.

A quanto pare, questo database ha solo due chiavi esterne e sono le stesse che abbiamo visto nell'esempio precedente.

Ecco un esempio che restituisce tutti i dati per FK_Albums_Artists chiave esterna:

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

Risultato:

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

Noterai che questo metodo non fornisce i dettagli della tabella della chiave primaria ed esterna che ottieni con il metodo precedente, quindi dovresti eseguire alcuni join con altre viste se hai bisogno di tali informazioni (o usa uno dei metodi sotto).

Esempio 3 – La vista di sistema KEY_COLUMN_USAGE

Il INFORMATION_SCHEMA.KEY_COLUMN_USAGE la vista di sistema restituisce una riga per ogni colonna vincolata come chiave nel database corrente.

SELECT 
  TABLE_NAME, 
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

Risultato:

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

Possiamo vedere che questo restituisce tutti i vincoli, comprese le chiavi primarie.

Possiamo anche aggiungere un WHERE clausola per restringere i risultati a una tabella specifica.

SELECT 
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'Albums';

Risultato:

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

In questi esempi, ho ristretto i risultati solo alle colonne della vista che mi interessano, ma puoi anche usare l'asterisco (* ) carattere jolly per restituire tutte le colonne.

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

Risultato (usando l'output verticale):

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

Esempio 4 – Vista del sistema CONSTRAINT_COLUMN_USAGE

Questo è simile all'esempio precedente. Il INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE la vista di sistema restituisce una riga per ogni colonna del database corrente che ha un vincolo definito sulla colonna.

Come con INFORMATION_SCHEMA.KEY_COLUMN_USAGE otterrai anche le chiavi primarie restituite con questa vista. Tuttavia, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE non si limita ai soli vincoli chiave.

SELECT 
  TABLE_NAME, 
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;

Risultato:

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

Puoi usare un WHERE clausola per restituire solo una tabella o una colonna specifica:

SELECT 
  TABLE_NAME, 
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE COLUMN_NAME = 'ArtistId';

Risultato:

+--------------+---------------+-------------------------------+
| TABLE_NAME   | COLUMN_NAME   | CONSTRAINT_NAME               |
|--------------+---------------+-------------------------------|
| Albums       | ArtistId      | FK_Albums_Artists             |
| Artists      | ArtistId      | PK__Artists__25706B50FCD918B1 |
+--------------+---------------+-------------------------------+

In questo caso ho specificato un nome di colonna, quindi ha restituito tutti i vincoli sulle colonne con quel nome. A quanto pare, il database utilizza lo stesso nome di colonna in due tabelle diverse. Uno ha un vincolo di chiave esterna, l'altro una chiave primaria. Pertanto vengono restituite entrambe le righe.

Anche in questo caso, puoi utilizzare l'asterisco (* ) carattere jolly per restituire tutte le colonne.

Ecco un esempio in cui restituisco tutti i dati per una tabella specifica:

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

Risultato (usando l'output verticale):

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

Esempio 5 – Vista del sistema CONSTRAINT_TABLE_USAGE

Il INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE la vista di sistema restituisce una riga per ogni tabella nel database corrente che ha un vincolo definito sulla tabella.

SELECT 
  TABLE_NAME,
  CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;

Risultato:

+--------------+-------------------------------+
| TABLE_NAME   | CONSTRAINT_NAME               |
|--------------+-------------------------------|
| Artists      | PK__Artists__25706B50FCD918B1 |
| Genres       | PK__Genres__0385057E88BB96F8  |
| Albums       | PK__Albums__97B4BE379FC780BD  |
| Albums       | FK_Albums_Artists             |
| Albums       | FK_Albums_Genres              |
+--------------+-------------------------------+

Questa vista non restituisce il nome o i nomi di colonna su cui vengono utilizzati i vincoli, quindi potrebbe non essere così utile per te, a seconda delle tue esigenze.

Ecco un esempio che mostra tutti i dati restituiti da questa vista per gli Album tabella:

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

Risultato:

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

Esempio 6 – La vista del sistema TABLE_CONSTRAINTS

Il INFORMATION_SCHEMA.TABLE_CONSTRAINTS la vista di sistema restituisce una riga per ogni vincolo di tabella nel database corrente.

SELECT 
  TABLE_NAME,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Risultato:

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

Questa vista non fornisce il nome della colonna, ma fornisce il tipo di vincolo. Pertanto, puoi restringere i risultati alle sole chiavi esterne:

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

Risultato:

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

Ecco un esempio che utilizza un carattere jolly (* ) per restituire tutti i dati per i vincoli di chiave esterna applicati agli Album tabella:

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

Risultato:

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

Esempio 7 – La vista di sistema sys.foreign_keys

Il sys.foreign_keys vista di sistema contiene una riga per oggetto che è una FOREIGN KEY vincolo, con sys.object.type = F ("F" sta per "Chiave straniera").

Esempio:

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

Risultato:

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

Eccolo quando restituisci tutti i dati per FK_Albums_Artists chiave esterna:

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

Risultato:

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

Esempio 8 – Vista di sistema sys.foreign_key_columns

Il sys.foreign_key_columns la vista di sistema contiene una riga per ogni colonna, o insieme di colonne, che comprende una chiave esterna.

Esempio:

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;

Risultato:

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

Ed eccolo qui quando restituisci tutti i dati per FK_Albums_Artists chiave esterna:

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

Risultato:

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

Esempio 9 – La vista di sistema di sys.objects

Il sys.objects vista sistema contiene una riga per ogni oggetto definito dall'utente con ambito schema creato all'interno di un database. Quindi include informazioni sulle nostre chiavi esterne.

Esempio:

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

Risultato:

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

In questo esempio ho ristretto i risultati alle sole chiavi esterne (digitare F ).

Ecco un esempio che restituisce tutti i dati per FK_Albums_Artists chiave esterna:

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

Risultato (usando l'output verticale):

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

Esempio 10:la stored procedure di sistema sp_helpconstraint

Il sp_helpconstraint la procedura memorizzata di sistema restituisce un elenco di tutti i tipi di vincolo, il nome definito dall'utente o fornito dal sistema, le colonne su cui sono stati definiti e l'espressione che definisce il vincolo (per DEFAULT e CHECK solo vincoli).

Pertanto puoi usarlo per restituire informazioni sulle chiavi esterne nel tuo database.

Esempio:

EXEC sp_helpconstraint Albums;

Risultato:

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

Esempio 11 – La stored procedure di sistema sp_help

Il sp_help la procedura memorizzata di sistema riporta informazioni su un oggetto database (qualsiasi oggetto elencato in sys.sysobjects visualizzazione compatibilità), un tipo di dati definito dall'utente o un tipo di dati. Ciò include informazioni sulle chiavi esterne.

Quando lo esegui senza alcun argomento, fornisce informazioni sulle informazioni di riepilogo degli oggetti di tutti i tipi che esistono nel database corrente (cioè un lotto di informazioni).

Tuttavia, puoi fornire il nome di una tabella e restituirà informazioni su quella tabella. Anche in questo caso, riceverai molte informazioni restituite, ma tra queste ci saranno le informazioni sulla chiave esterna.

Esempio:

EXEC sp_help Albums;

Risultato:

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