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

Compruebe si una tabla hace referencia a una clave externa en SQL Server con OBJECTPROPERTY()

Puede usar OBJECTPROPERTY() función en SQL Server para comprobar si una clave externa hace referencia o no a una tabla.

Para hacer esto, pase el ID del objeto de la tabla como primer argumento y TableHasForeignRef como segundo argumento. La función devuelve un 1 o un 0 dependiendo de si está referenciado o no por una clave externa.

Un valor de retorno de 1 significa que la tabla es referenciado por una clave externa y un valor de 0 significa que no lo es.

Tenga en cuenta que los ejemplos presentados aquí no enumeran las claves foráneas o sus tablas ni nada por el estilo. Simplemente devuelven un valor verdadero/falso que puede usar para probar si una clave externa hace referencia o no a una tabla. Si necesita enumerar todas las claves externas que hacen referencia a una tabla determinada, consulte Devolver todas las claves externas que hacen referencia a una tabla determinada en SQL Server. Los ejemplos en ese artículo enumeran cada clave externa, así como las tablas de clave externa y la tabla de clave principal.

Ejemplo 1:uso básico

Aquí hay un ejemplo rápido para demostrarlo.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

En este caso, el WideWorldImportersDW La base de datos tiene una tabla con el ID proporcionado y una clave externa hace referencia a ella.

Ejemplo 2:obtener el ID del objeto

Si conoce el nombre de la tabla, pero no su ID, puede usar el OBJECT_ID() función para recuperar el ID basado en su nombre.

Ejemplo:

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

Este es el mismo objeto del ejemplo anterior.

Aquí está de nuevo con la salida de ID por separado.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:

+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Ejemplo 3:cuando la tabla NO está referenciada por una clave externa

Esto es lo que sucede cuando una clave externa no hace referencia a la tabla.

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

En este caso, el objeto es una tabla, solo que no está referenciado por una clave externa.

Ejemplo 4:cuando el objeto no es una tabla

Esto es lo que sucede cuando la base de datos contiene un objeto con el ID, pero ese objeto no es una tabla.

SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| NULL                 |
+----------------------+

Ejemplo 5:el objeto no existe

SQL Server asume que el ID del objeto está en el contexto de la base de datos actual. Si pasa un ID de objeto de una base de datos diferente, obtendrá un resultado NULO o obtendrá resultados incorrectos.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') AS [12345678];

Resultado:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

En este caso, la base de datos no contiene objetos con ese nombre o ID, por lo que obtengo un resultado NULL.

También obtendrá NULL en caso de error o si no tiene permiso para ver el objeto.