sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver todas las claves externas que hacen referencia a una tabla dada en SQL Server

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.