sql >> Base de Datos >  >> RDS >> Sqlserver

11 formas de recuperar una clave principal en SQL Server (ejemplos de T-SQL)

A menudo, hay muchas formas de hacer lo mismo (o algo similar) en SQL Server. Recuperar todas las claves principales de una base de datos (o incluso solo la clave principal de una tabla dada) es un buen ejemplo.

Este artículo presenta once enfoques diferentes para recuperar información de clave principal en SQL Server.

Algunos de estos serán más útiles que otros, dependiendo de su situación exacta.

Ejemplo 1:el procedimiento almacenado del sistema sp_pkeys

Si solo desea la clave principal para una tabla determinada, sp_pkeys El procedimiento almacenado del sistema es probablemente la forma más rápida y sencilla de hacerlo. Para hacer esto, simplemente pase el nombre de la tabla al procedimiento.

Así:

EXEC sp_pkeys Artists;

Resultado (usando salida vertical):

TABLE_QUALIFIER | Music
TABLE_OWNER     | dbo
TABLE_NAME      | Artists
COLUMN_NAME     | ArtistId
KEY_SEQ         | 1
PK_NAME         | PK__Artists__25706B50FCD918B1

En este caso solicité la clave principal a los Artistas mesa. Devuelve el nombre de la clave principal ( PK__Artists__25706B50FCD918B1 ), el nombre de la base de datos ( Música ), el nombre de la tabla, el nombre de la columna ( ArtistId ), además de otra información.

Alternativamente, podría haber especificado explícitamente todos los argumentos para obtener el mismo resultado:

EXEC sp_pkeys 
  @table_name = Artists,
  @table_owner = dbo,
  @table_qualifier = Music;

Ejemplo 2:la vista del sistema KEY_COLUMN_USAGE

El INFORMATION_SCHEMA.KEY_COLUMN_USAGE La vista del sistema devuelve una fila para cada columna que está restringida como clave en la base de datos actual. Por lo tanto, también obtendrá claves foráneas devueltas con esta vista.

SELECT 
  TABLE_NAME, 
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

Resultado:

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

Podemos ver que esto devuelve restricciones de todas las tablas. También podríamos agregar un WHERE cláusula para restringir los resultados a una tabla específica.

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

Resultado:

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

En estos ejemplos, reduje los resultados a solo aquellas columnas de la vista que me interesan, pero también puede usar el asterisco (* ) comodín para devolver todas las columnas.

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

Resultado (usando salida vertical):

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

Ejemplo 3:la vista del sistema CONSTRAINT_COLUMN_USAGE

Esto es similar al ejemplo anterior. El INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE La vista del sistema devuelve una fila para cada columna en la base de datos actual que tiene una restricción definida en la columna. Como con INFORMATION_SCHEMA.KEY_COLUMN_USAGE también obtendrá claves foráneas devueltas con esta vista. Sin embargo, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE no se limita solo a restricciones clave.

SELECT 
  TABLE_NAME, 
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;

Resultado:

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

Puedes usar un WHERE cláusula para devolver solo una tabla o columna específica:

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

Resultado:

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

En este caso, especifiqué un nombre de columna, por lo que devolvió todas las restricciones en las columnas con ese nombre. Resulta que la base de datos usa el mismo nombre de columna en dos tablas diferentes. Uno tiene una restricción de clave externa, el otro una clave principal. Por lo tanto, se devuelven ambas filas.

Nuevamente, puede usar el asterisco (* ) comodín para devolver todas las columnas.

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

Resultado (usando salida vertical):

TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Artists
COLUMN_NAME        | ArtistId
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | PK__Artists__25706B50FCD918B1

En este ejemplo, limité la salida a solo restricciones en una tabla específica.

Ejemplo 4:la vista del sistema CONSTRAINT_TABLE_USAGE

El INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE La vista del sistema devuelve una fila para cada tabla en la base de datos actual que tiene una restricción definida en la tabla.

SELECT 
  TABLE_NAME,
  CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;

Resultado:

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

Esta vista no devuelve los nombres de columna en los que se utilizan las restricciones, por lo que podría no ser tan útil para usted, según sus requisitos.

Este es un ejemplo que muestra todos los datos devueltos por esta vista para los Géneros tabla:

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

Resultado:

TABLE_CATALOG      | Music
TABLE_SCHEMA       | dbo
TABLE_NAME         | Genres
CONSTRAINT_CATALOG | Music
CONSTRAINT_SCHEMA  | dbo
CONSTRAINT_NAME    | PK__Genres__0385057E88BB96F8

Ejemplo 5:la vista del sistema TABLE_CONSTRAINTS

El INFORMATION_SCHEMA.TABLE_CONSTRAINTS la vista del sistema devuelve una fila para cada restricción de tabla en la base de datos actual.

SELECT 
  TABLE_NAME,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Resultado:

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

Esta vista no proporciona el nombre de la columna, pero sí proporciona el tipo de restricción. Por lo tanto, puede restringir los resultados a solo claves principales:

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

Resultado:

+--------------+-------------------------------+-------------------+
| TABLE_NAME   | CONSTRAINT_NAME               | CONSTRAINT_TYPE   |
|--------------+-------------------------------+-------------------|
| Artists      | PK__Artists__25706B50FCD918B1 | PRIMARY KEY       |
| Genres       | PK__Genres__0385057E88BB96F8  | PRIMARY KEY       |
| Albums       | PK__Albums__97B4BE379FC780BD  | PRIMARY KEY       |
+--------------+-------------------------------+-------------------+

Aquí hay un ejemplo que usa un comodín (* ) carácter para devolver todos los datos para las restricciones en los Artistas tabla:

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'Artists';

Resultado:

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

Ejemplo 6:la vista del sistema key_constraints

Las sys.key_constraints La vista del sistema contiene una fila para cada objeto que es una clave principal o una restricción única. Por lo tanto, podríamos usar el siguiente código para devolver todas las restricciones de clave principal en la base de datos, junto con la tabla relevante para cada clave principal:

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

Resultado:

+---------+-------------------------------+
| Table   | name                          |
|---------+-------------------------------|
| Artists | PK__Artists__25706B50FCD918B1 |
| Genres  | PK__Genres__0385057E88BB96F8  |
| Albums  | PK__Albums__97B4BE379FC780BD  |
+---------+-------------------------------+

Por supuesto, puede eliminar el WHERE cláusula para devolver ambas claves primarias y claves únicas.

El ejemplo anterior usa OBJECT_NAME() función para devolver el nombre de la tabla principal, en lugar de su object_id. Si no usé el OBJECT_NAME() función, el resultado se vería así:

SELECT 
  parent_object_id,
  name
FROM sys.key_constraints
WHERE type = 'PK';

Resultado:

+--------------------+-------------------------------+
| parent_object_id   | name                          |
|--------------------+-------------------------------|
| 885578193          | PK__Artists__25706B50FCD918B1 |
| 917578307          | PK__Genres__0385057E88BB96F8  |
| 949578421          | PK__Albums__97B4BE379FC780BD  |
+--------------------+-------------------------------+

El parent_object_id se devuelve en lugar del nombre del objeto principal. El OBJECT_NAME() hace que sea mucho más fácil para nosotros entender a qué tabla se aplica cada tecla.

Aquí hay un ejemplo donde uso el comodín (* ) carácter para devolver todas las columnas para la clave principal en los Álbumes tabla:

SELECT *
FROM sys.key_constraints
WHERE type = 'PK'
AND OBJECT_NAME(parent_object_id) = 'Albums';

Resultado:

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

Ejemplo 7:la vista del sistema sys.objects

Los sys.objects La vista del sistema contiene una fila para cada objeto de ámbito de esquema definido por el usuario que se crea dentro de una base de datos. Por lo tanto, contiene nuestras tablas y claves principales.

Podemos tomar la consulta anterior y reemplazar key_constraints con objects y obtendremos el mismo resultado:

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

Resultado:

+---------+-------------------------------+
| Table   | name                          |
|---------+-------------------------------|
| Artists | PK__Artists__25706B50FCD918B1 |
| Genres  | PK__Genres__0385057E88BB96F8  |
| Albums  | PK__Albums__97B4BE379FC780BD  |
+---------+-------------------------------+

Aquí hay un ejemplo que devuelve todos los datos para PK__Genres__0385057E88BB96F8 clave principal:

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

Resultado (usando salida vertical):

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

Ejemplo 8:la vista del sistema REFERENTIAL_CONSTRAINTS

Este es un poco exagerado, pero podría ser útil dependiendo de su situación. Y técnicamente, devuelve (algunas) claves primarias.

El INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS la vista del sistema devuelve una fila para cada FOREIGN KEY restricción en la base de datos actual. Entonces, su propósito es en realidad devolver claves externas, no claves primarias. Sin embargo, esta vista puede ser útil si solo desea ver todas las claves principales que tienen una clave externa asociada. No es un método confiable para usar si desea ver todas las claves principales, independientemente de si hay una clave externa asociada.

He aquí un ejemplo:

SELECT 
    CONSTRAINT_NAME,
    UNIQUE_CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;

Resultado:

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

Como puede ver, esto solo devuelve aquellas claves primarias que tienen una clave externa asociada. Para ser más precisos, en realidad es al revés:devuelve todas las claves externas, junto con su UNIQUE asociado. restricción.

Entonces, si comparamos estos resultados con los resultados de los ejemplos anteriores, podemos ver que solo se devuelven dos claves principales (en comparación con las tres de los ejemplos anteriores). Esto se debe a que una de las claves principales de esta base de datos ( PK__Albums__97B4BE379FC780BD ) no tiene una clave externa asociada.

Aquí hay un ejemplo que devuelve todos los datos para claves foráneas de las cuales PK__Artists__25706B50FCD918B1 es el UNIQUE restricción:

SELECT *
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE UNIQUE_CONSTRAINT_NAME = 'PK__Artists__25706B50FCD918B1';

Resultado:

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

En este caso, solo se devuelve una clave externa.

Como se mencionó, esta vista es principalmente para devolver información de clave externa, así que solo use este método si desea ver información de clave externa junto con la clave principal asociada. No utilice este método si desea ver todas las claves principales independientemente de si tienen una clave externa asociada.

Ejemplo 9:el procedimiento almacenado del sistema sp_fkeys

Este método es similar al método anterior, en el sentido de que devuelve información de clave externa. También devuelve la clave principal asociada con cada clave externa.

Ejemplo:

EXEC sp_fkeys Artists;

Resultado (usando salida vertical):

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

Podría haber usado la siguiente sintaxis en su lugar (o una combinación de estos argumentos):

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

Al igual que con el ejemplo anterior, no se debe confiar en este método para devolver todas las claves principales. Si una clave principal no tiene una clave externa asociada, no se devolverá.

Ejemplo 10:el procedimiento almacenado del sistema sp_helpconstraint

La sp_helpconstraint El procedimiento almacenado del sistema devuelve una lista de todos los tipos de restricciones, su nombre definido por el usuario o proporcionado por el sistema, las columnas en las que se han definido y la expresión que define la restricción (para DEFAULT y CHECK restricciones solamente).

Por lo tanto, puede usarlo para devolver información sobre claves primarias en su base de datos.

Ejemplo:

EXEC sp_helpconstraint Albums;

Resultado:

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

Ejemplo 11:el procedimiento almacenado del sistema sp_help

El sp_help El procedimiento almacenado del sistema informa sobre un objeto de la base de datos (cualquier objeto enumerado en sys.sysobjects vista de compatibilidad), un tipo de datos definido por el usuario o un tipo de datos. Esto incluye información sobre claves principales.

Cuando ejecuta esto sin ningún argumento, proporciona información sobre la información de resumen de los objetos de todos los tipos que existen en la base de datos actual (es decir, mucho de información).

Sin embargo, puede proporcionar el nombre de una tabla y devolverá información sobre esa tabla. Una vez más, obtendrá una gran cantidad de información devuelta, pero entre esta habrá información clave principal.

Ejemplo:

EXEC sp_help Artists;

Resultado:

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

También puede proporcionar el nombre de una clave principal para obtener información básica sobre ella:

EXEC sp_help PK__Artists__25706B50FCD918B1;

Resultado:

+-------------------------------+---------+-----------------+-------------------------+
| Name                          | Owner   | Type            | Created_datetime        |
|-------------------------------+---------+-----------------+-------------------------|
| PK__Artists__25706B50FCD918B1 | dbo     | primary key cns | 2019-05-02 12:56:05.853 |
+-------------------------------+---------+-----------------+-------------------------+