Si necesita devolver todas las claves externas que hacen referencia a una tabla determinada en SQL Server, pruebe uno de los siguientes métodos.
El primer método consulta el sys.foreign_keys
vista del sistema. El segundo método ejecuta sp_fkeys
procedimiento almacenado del sistema.
Opción 1:sys.foreign_keys
El siguiente código recupera todas las claves foráneas que hacen referencia a una tabla determinada, junto con las tablas de clave principal y de clave foránea. También incluyo el esquema para las tablas de claves foráneas.
USE WideWorldImportersDW; SELECT OBJECT_NAME(referenced_object_id) AS [PK Table], name AS [Foreign Key], SCHEMA_NAME(schema_id) AS [FK Schema], OBJECT_NAME(parent_object_id) AS [FK Table] FROM sys.foreign_keys WHERE referenced_object_id = OBJECT_ID('Dimension.City');
Resultado:
+------------+---------------------------------------+-------------+------------+ | PK Table | Foreign Key | FK Schema | FK Table | |------------+---------------------------------------+-------------+------------| | City | FK_Fact_Order_City_Key_Dimension_City | Fact | Order | | City | FK_Fact_Sale_City_Key_Dimension_City | Fact | Sale | +------------+---------------------------------------+-------------+------------+
En este caso estoy usando WideWorldImportersDW base de datos, y devuelvo las claves foráneas que hacen referencia a Dimension.City
tabla (la Dimension.City
la tabla contiene la columna de la clave principal a la que hacen referencia las claves externas).
Opción 2:sp_fkeys
Otra forma de obtener las claves externas que hacen referencia a una tabla en particular es usar sp_fkeys
procedimiento almacenado del sistema. Este procedimiento almacenado nos brinda la opción de obtener claves externas basadas en (entre otras cosas) la tabla de referencia o la tabla de referencia.
En este caso, estamos interesados en obtener las claves externas que hacen referencia a una tabla determinada, por lo que podemos hacer esto:
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
Resultado (usando salida vertical):
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7 -[ RECORD 2 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Sale FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Sale_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7
Esto se puede cambiar fácilmente para buscar claves foráneas basadas en la tabla de claves foráneas simplemente reemplazando los parámetros con @fktable_name
y @fktable_owner
:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
Una verificación de verdadero/falso
Si simplemente desea saber si una clave externa hace referencia o no a una tabla, pero no desea que se enumere todo, consulte Comprobar si una clave externa hace referencia a una tabla en SQL Server con OBJECTPROPERTY().
Ese artículo usa TableHasForeignRef
argumento de OBJECTPROPERTY()
función para devolver 1
si la tabla está referenciada por una clave foránea, y 0
si no lo es.