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.

Icono de vínculo a temasConvenciones 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 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 del propietario 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.

DELETE_RULE

smallint

Acción aplicada a la clave externa si la operación de SQL es una eliminación. SQL Server devuelve 0 o 1 para estas columnas:

0=CASCADE cambia a clave externa.

1=NO ACTION cambia si la clave externa está presente.

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.

Comentarios

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 AdventureWorks2008R2.

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