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

Averigüe si un objeto es una clave externa con OBJECTPROPERTY() en SQL Server

Puede usar OBJECTPROPERTY() función en SQL Server para averiguar si un objeto es o no una clave externa.

Para averiguar si un objeto es una clave externa, pase el ID del objeto como primer argumento y IsForeignKey como segundo argumento. La función devuelve un 1 o un 0 dependiendo de si es o no una clave foránea.

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

Ejemplo 1:uso básico

Aquí hay un ejemplo rápido para demostrarlo.

USE Music;
SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];

Resultado:

+----------------+
| IsForeignKey   |
|----------------|
| 1              |
+----------------+

En este caso, la Música La base de datos tiene un objeto con la ID proporcionada y es una clave externa.

Ejemplo 2:obtener el ID del objeto

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

Ejemplo:

SELECT OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];

Resultado:

+----------------+
| IsForeignKey   |
|----------------|
| 1              |
+----------------+

En este caso verifiqué el mismo objeto del ejemplo anterior.

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

SELECT 
  OBJECT_ID('FK_Albums_Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];

Resultado:

+-------------+----------------+
| Object ID   | IsForeignKey   |
|-------------+----------------|
| 981578535   | 1              |
+-------------+----------------+

Ejemplo 3:cuando el objeto NO es una clave externa

Esto es lo que sucede cuando el objeto no es una clave externa.

SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];

Resultado:

+----------------+
| IsForeignKey   |
|----------------|
| 0              |
+----------------+

En este caso, la base de datos de hecho, tengo un objeto con esa ID, pero el objeto es en realidad una vista, por lo que obtengo un resultado negativo.

Aquí está nuevamente usando OBJECT_ID() .

SELECT 
  OBJECT_ID('RockAlbums') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];

Resultado:

+-------------+----------------+----------+
| Object ID   | IsForeignKey   | IsView   |
|-------------+----------------+----------|
| 1525580473  | 0              | 1        |
+-------------+----------------+----------+

En este caso, también verifiqué si el objeto es una vista y el resultado es positivo.

Ejemplo 4: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'), 'IsForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsForeignKey') 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.