sp_fkeys (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Almacenamiento en Microsoft Fabric

Devuelve información acerca de las claves externas lógicas del entorno actual. Este procedimiento muestra las relaciones de las claves externas, incluidas las claves externas deshabilitadas.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_fkeys [ @pktable_name = ] 'pktable_name'   
     [ , [ @pktable_owner = ] 'pktable_owner' ]   
     [ , [ @pktable_qualifier = ] 'pktable_qualifier' ]   
     { , [ @fktable_name = ] 'fktable_name' }   
     [ , [ @fktable_owner = ] 'fktable_owner' ]   
     [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]  

Argumentos

[ @pktable_name=] 'pktable_name'
Es el nombre de la tabla, con la clave externa, utilizada para devolver información del catálogo. pktable_name es sysname, con un valor predeterminado NULL. No se admite la coincidencia de patrón de caracteres comodín. Se debe proporcionar este parámetro, el parámetro fktable_name o ambos.

[ @pktable_owner=] 'pktable_owner'
Es el nombre del propietario de la tabla, con la clave principal, utilizada para devolver información del catálogo. pktable_owner es de tipo sysname y su valor predeterminado es NULL. No se admite la coincidencia de patrón de caracteres comodín. Si no se especifica pktable_owner, se aplican las reglas de visibilidad de tabla predeterminadas del DBMS subyacente.

En SQL Server, si el usuario actual es propietario de una tabla con el nombre especificado, se devuelven las columnas de esa tabla. Si no se especifica pktable_owner y el usuario actual no es el propietario de una tabla con el pktable_name especificado, el procedimiento busca una tabla con el pktable_name especificado que pertenezca al propietario de la base de datos. Si hay una, se devuelven las columnas de esa tabla.

[ @pktable_qualifier =] 'pktable_qualifier'
Es el nombre del calificador de la tabla (con la clave principal). pktable_qualifier es de tipo sysname y su valor predeterminado es NULL. Varios productos DBMS admiten en las tablas nombres formados por tres componentes: qualifier.owner.name. En SQL Server, el calificador representa el nombre de la base de datos. En algunos productos, representa el nombre de servidor del entorno de base de datos de la tabla.

[ @fktable_name=] 'fktable_name'
Es el nombre de la tabla, con una clave externa, utilizada para devolver información del catálogo. fktable_name es sysname, con un valor predeterminado NULL. No se admite la coincidencia de patrón de caracteres comodín. Se debe proporcionar este parámetro, el parámetro pktable_name o ambos.

[ @fktable_owner =] 'fktable_owner'
Es el nombre del propietario de la tabla, con una clave externa, utilizada para devolver información del catálogo. fktable_owner es de tipo sysname y su valor predeterminado es NULL. No se admite la coincidencia de patrón de caracteres comodín. Si no se especifica fktable_owner, se aplican las reglas de visibilidad de tabla predeterminadas del DBMS subyacente.

En SQL Server, si el usuario actual es propietario de una tabla con el nombre especificado, se devuelven las columnas de esa tabla. Si no se especifica fktable_owner y el usuario actual no es el propietario de una tabla con el fktable_name especificado, el procedimiento busca una tabla con el fktable_name especificado que pertenezca al propietario de la base de datos. Si hay una, se devuelven las columnas de esa tabla.

[ @fktable_qualifier= ] 'fktable_qualifier'
Es el nombre del calificador de la tabla (con una clave externa). fktable_qualifier es de tipo sysname y su valor predeterminado es NULL. En SQL Server, el calificador representa el nombre de la base de datos. En algunos productos, representa el nombre de servidor del entorno de base de datos de la tabla.

Valores de código de retorno

None

Conjuntos de resultados

Nombre de la columna Tipo de datos Descripción
PKTABLE_QUALIFIER sysname Nombre del calificador de la tabla (con la clave principal). Este campo puede ser NULL.
PKTABLE_OWNER sysname Nombre del propietario de la tabla (con la clave principal). Este campo siempre devuelve un valor.
PKTABLE_NAME sysname Nombre de la tabla (con la clave principal). Este campo siempre devuelve un valor.
PKCOLUMN_NAME sysname Nombre de las columnas de clave principal para cada columna de TABLE_NAME devuelta. Este campo siempre devuelve un valor.
FKTABLE_QUALIFIER sysname Nombre del calificador de la tabla (con una clave externa). Este campo puede ser NULL.
FKTABLE_OWNER sysname Nombre del propietario de la tabla (con una clave externa). Este campo siempre devuelve un valor.
FKTABLE_NAME sysname Nombre de la tabla (con una clave externa). Este campo siempre devuelve un valor.
FKCOLUMN_NAME sysname Nombre de la columna de clave externa para cada columna de TABLE_NAME devuelta. Este campo siempre devuelve un valor.
KEY_SEQ smallint Número de secuencia de la columna en una clave principal con varias columnas. Este campo siempre devuelve un valor.
UPDATE_RULE smallint Acción aplicada a la clave externa si la operación de SQL es una actualización. Valores posibles:
0=CASCADE cambia a clave externa.
1=NO ACTION cambia si la clave externa está presente.
2 = establecer null
3 = Establecer valor predeterminado
DELETE_RULE smallint Acción aplicada a la clave externa si la operación de SQL es una eliminación. Valores posibles:
0=CASCADE cambia a clave externa.
1=NO ACTION cambia si la clave externa está presente.
2 = establecer null
3 = Establecer valor predeterminado
FK_NAME sysname Identificador de la clave externa. Es NULL si no es aplicable al origen de datos. SQL Server devuelve el nombre de la restricción FOREIGN KEY.
PK_NAME sysname Identificador de la clave principal. Es NULL si no es aplicable al origen de datos. SQL Server devuelve el nombre de la restricción PRIMARY KEY.

Los resultados devueltos se ordenan por FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME y KEY_SEQ.

Observaciones

La codificación de aplicaciones que incluye tablas con claves externas deshabilitadas se puede implementar si:

  • Se deshabilita temporalmente la comprobación de restricciones (ALTER TABLE NOCHECK o CREATE TABLE NOT FOR REPLICATION) mientras se trabaja con las tablas y, después, se vuelve a habilitar.

  • Se utilizan desencadenadores o código de aplicación para exigir relaciones.

Si se proporciona el nombre de tabla de la clave principal y el nombre de tabla de la clave externa es NULL, sp_fkeys devuelve todas las tablas que contengan una clave externa para la tabla dada. Si se proporciona el nombre de tabla de la clave externa y el nombre de tabla de la clave principal es NULL, sp_fkeys devuelve todas las tablas relacionadas mediante una relación de clave principal y clave externa con las claves externas de la tabla de claves externas.

El procedimiento almacenado sp_fkeys es equivalente a SQLForeignKeys en ODBC.

Permisos

Es necesario contar con un permiso de tipo SELECT sobre el esquema.

Ejemplos

En el siguiente ejemplo se recupera una lista de claves externas de la tabla HumanResources.Department en la base de datos AdventureWorks2022.

USE AdventureWorks2022;  
GO  
EXEC sp_fkeys @pktable_name = N'Department'  
    ,@pktable_owner = N'HumanResources';  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

En el siguiente ejemplo se recupera una lista de claves externas de la tabla DimDate en la base de datos AdventureWorksPDW2012. No se devuelve ninguna fila porque Azure Synapse Analytics no admite claves externas.

EXEC sp_fkeys @pktable_name = N'DimDate';  

Consulte también

Procedimientos almacenados del catálogo (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)
sp_pkeys (Transact-SQL)