Compartir a través de


sp_fkeys (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW) Warehouse 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 = ] N'pktable_name' ]
    [ , [ @pktable_owner = ] N'pktable_owner' ]
    [ , [ @pktable_qualifier = ] N'pktable_qualifier' ]
    [ , [ @fktable_name = ] N'fktable_name' ]
    [ , [ @fktable_owner = ] N'fktable_owner' ]
    [ , [ @fktable_qualifier = ] N'fktable_qualifier' ]
[ ; ]

Argumentos

[ @pktable_name = ] N'pktable_name'

Nombre de la tabla, con la clave principal, que se usa para devolver información de catálogo. @pktable_name es sysname, con un valor predeterminado de NULL. No se admite la coincidencia de patrones comodín. Este parámetro o el parámetro @fktable_name , o ambos, deben proporcionarse.

[ @pktable_owner = ] N'pktable_owner'

Nombre del propietario de la tabla (con la clave principal) que se usa para devolver información del catálogo. @pktable_owner es sysname, con un valor predeterminado de NULL. No se admite la coincidencia de patrones comodín. Si no se especifica @pktable_owner , se aplican las reglas de visibilidad de tabla predeterminadas del sistema de administración de bases de datos (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 posee una tabla con el @pktable_name especificado, el procedimiento busca una tabla con el @pktable_name especificado propiedad del propietario de la base de datos. Si hay una, se devuelven las columnas de esa tabla.

[ @pktable_qualifier = ] N'pktable_qualifier'

Nombre de la tabla (con la clave principal) calificador. @pktable_qualifier es sysname, con un valor predeterminado de 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 = ] N'fktable_name'

Nombre de la tabla (con una clave externa) que se usa para devolver información del catálogo. @fktable_name es sysname, con un valor predeterminado de NULL. No se admite la coincidencia de patrones comodín. Este parámetro o el parámetro @pktable_name , o ambos, deben proporcionarse.

[ @fktable_owner = ] N'fktable_owner'

Nombre del propietario de la tabla (con una clave externa) que se usa para devolver información del catálogo. @fktable_owner es sysname, con un valor predeterminado de NULL. No se admite la coincidencia de patrones 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 posee una tabla con el @fktable_name especificado, el procedimiento busca una tabla con el @fktable_name especificado propiedad del propietario de la base de datos. Si hay una, se devuelven las columnas de esa tabla.

[ @fktable_qualifier = ] N'fktable_qualifier'

Nombre de la tabla (con una clave externa) calificador. @fktable_qualifier es sysname, con un valor predeterminado de 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

Ninguno.

Conjunto 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 del TABLE_NAME devuelto. 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 del TABLE_NAME devuelto. 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 cambios en la clave externa.
1 = NO ACTION cambia si la clave externa está presente.
2 = SET_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 cambios en la clave externa.
1 = NO ACTION cambia si la clave externa está presente.
2 = SET_NULL
3 = establecer el valor predeterminado
FK_NAME sysname Identificador de la clave externa. Es si no es NULL aplicable al origen de datos. SQL Server devuelve el nombre de FOREIGN KEY la restricción.
PK_NAME sysname Identificador de la clave principal. Es si no es NULL aplicable al origen de datos. SQL Server devuelve el nombre de PRIMARY KEY la restricción.

Los resultados devueltos se ordenan mediante FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAMEy KEY_SEQ.

Comentarios

La codificación de aplicaciones que incluye tablas con claves externas deshabilitadas se puede implementar mediante los métodos siguientes:

  • Deshabilitar temporalmente la comprobación de restricciones (ALTER TABLE NOCHECK o CREATE TABLE NOT FOR REPLICATION) mientras trabaja con las tablas y, a continuación, habilitarla de nuevo más adelante.

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

Si se proporciona el nombre de la tabla de clave principal y el nombre de la tabla de clave externa es NULL, sp_fkeys devuelve todas las tablas que incluyen una clave externa a la tabla especificada. Si se proporciona el nombre de la tabla de clave externa y el nombre de la tabla de clave principal es NULL, sp_fkeys devuelve todas las tablas relacionadas con una relación de clave principal o clave externa con las claves externas de la tabla de claves externas.

El sp_fkeys procedimiento almacenado 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';