Vous pouvez utiliser le OBJECTPROPERTY()
fonction dans SQL Server pour savoir si oui ou non un objet est une clé étrangère.
Pour savoir si un objet est une clé étrangère, passez l'ID de l'objet comme premier argument, et IsForeignKey
comme deuxième argument. La fonction renvoie un 1
ou un 0
selon qu'il s'agit ou non d'une clé étrangère.
Une valeur de retour de 1
signifie qu'il est une clé étrangère et une valeur de 0
signifie que ce n'est pas le cas.
Exemple 1 - Utilisation de base
Voici un exemple rapide à démontrer.
USE Music; SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];
Résultat :
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
Dans ce cas, le champ Musique la base de données a un objet avec l'ID fourni, et c'est une clé étrangère.
Exemple 2 - Obtenir l'ID d'objet
Si vous connaissez le nom de l'objet, 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('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Résultat :
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
Dans ce cas, j'ai vérifié 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('FK_Albums_Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Résultat :
+-------------+----------------+ | Object ID | IsForeignKey | |-------------+----------------| | 981578535 | 1 | +-------------+----------------+
Exemple 3 - Lorsque l'objet n'est PAS une clé étrangère
Voici ce qui se passe lorsque l'objet n'est pas une clé étrangère.
SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];
Résultat :
+----------------+ | IsForeignKey | |----------------| | 0 | +----------------+
Dans ce cas, la base de données fait j'ai en fait un objet avec cet ID, mais l'objet est en fait une vue, donc j'obtiens un résultat négatif.
Le voici à nouveau en utilisant OBJECT_ID()
.
SELECT OBJECT_ID('RockAlbums') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];
Résultat :
+-------------+----------------+----------+ | Object ID | IsForeignKey | IsView | |-------------+----------------+----------| | 1525580473 | 0 | 1 | +-------------+----------------+----------+
Dans ce cas, j'ai également vérifié si l'objet est une vue, et le résultat est positif.
Exemple 4 - 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'), 'IsForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsForeignKey') 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.