sp_fkeys (Transact-SQL)
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.
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 principal, utilizada para devolver información del catálogo. pktable_name es de tipo sysname y su valor predeterminado es 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 predeterminadas de visibilidad de tabla 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 valor de pktable_name especificado, el procedimiento busca una tabla con el valor de 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 nombres de tres partes para las tablas (qualifier.owner.name). En SQL Server, el calificador representa el nombre de la base de datos. En algunos productos, representa el nombre del 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 de tipo sysname y su valor predeterminado es 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 predeterminadas de visibilidad de tabla 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 valor de fktable_name especificado, el procedimiento busca una tabla con el valor de 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 del servidor del entorno de base de datos de la tabla.
Valores de código de retorno
Ninguno
Conjuntos de resultados
Nombre de 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. SQL Server devuelve 0 ó 1 para estas columnas: 0=CASCADE cambia a clave externa. 1=NO ACTION cambia si la clave externa está presente. 2=SET_NULL; establece la clave externa como NULL. |
DELETE_RULE |
smallint |
Acción aplicada a la clave externa si la operación de SQL es una eliminación. SQL Server devuelve 0 ó 1 para estas columnas: 0=CASCADE cambia a clave externa. 1=NO ACTION cambia si la clave externa está presente. 2=SET_NULL; establece la clave externa como NULL. |
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.
Notas
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. Para obtener más información acerca de la opción NOT FOR REPLICATION, vea Controlar restricciones, identidades y desencadenadores con NOT FOR REPLICATION.
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
Requiere el permiso SELECT en el esquema.
Ejemplos
En el siguiente ejemplo se recupera una lista de claves externas de la tabla HumanResources.Department en la base de datos AdventureWorks.
USE AdventureWorks;
GO
EXEC sp_fkeys @pktable_name = N'Department'
,@pktable_owner = N'HumanResources'