Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vérifiez si une table est référencée par une clé étrangère dans SQL Server avec OBJECTPROPERTY()

Vous pouvez utiliser le OBJECTPROPERTY() fonction dans SQL Server pour vérifier si une table est référencée ou non par une clé étrangère.

Pour ce faire, passez l'ID d'objet de la table comme premier argument, et TableHasForeignRef comme deuxième argument. La fonction renvoie un 1 ou un 0 selon qu'il est référencé ou non par une clé étrangère.

Une valeur de retour de 1 signifie que la table est référencé par une clé étrangère, et une valeur de 0 signifie que ce n'est pas le cas.

Notez que les exemples présentés ici ne répertorient pas les clés étrangères ou leurs tables ou quelque chose comme ça. Ils renvoient simplement une valeur vrai/faux que vous pouvez utiliser pour tester si une table est référencée ou non par une clé étrangère. Si vous devez répertorier toutes les clés étrangères qui référencent une table donnée, consultez Renvoyer toutes les clés étrangères qui référencent une table donnée dans SQL Server. Les exemples de cet article répertorient chaque clé étrangère, ainsi que la ou les tables de clés étrangères et la table de clés primaires.

Exemple 1 - Utilisation de base

Voici un exemple rapide à démontrer.

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

Résultat :

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

Dans ce cas, le WideWorldImportersDW la base de données a une table avec l'ID fourni, et elle est référencée par une clé étrangère.

Exemple 2 - Obtenir l'ID d'objet

Si vous connaissez le nom de la table, mais pas son ID, vous pouvez utiliser le OBJECT_ID() fonction pour récupérer l'ID en fonction de son nom.

Exemple :

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

Résultat :

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

C'est le même objet de l'exemple précédent.

Le voici à nouveau avec la sortie de l'ID séparément.

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

Résultat :

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

Exemple 3 - Lorsque la table n'est PAS référencée par une clé étrangère

Voici ce qui se passe lorsque la table n'est pas référencée par une clé étrangère.

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

Résultat :

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

Dans ce cas, l'objet est une table, c'est juste qu'il n'est pas référencé par une clé étrangère.

Exemple 4 - Lorsque l'objet n'est pas une table

Voici ce qui se passe lorsque la base de données contient un objet avec l'ID, mais que cet objet n'est pas une table.

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

Résultat :

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

Exemple 5 - L'objet n'existe pas

SQL Server suppose que l'ID d'objet se trouve dans le contexte de base de données actuel. Si vous transmettez un ID d'objet d'une autre base de données, vous obtiendrez soit un résultat NULL, soit des résultats incorrects.

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

Résultat :

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

Dans ce cas, la base de données ne contient aucun objet de ce nom ou ID, et j'obtiens donc un résultat NULL.

Vous obtiendrez également NULL en cas d'erreur ou si vous n'êtes pas autorisé à afficher l'objet.