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

Utilisez OBJECTPROPERTY() pour savoir si une table est une table système dans SQL Server

Le OBJECTPROPERTY() La fonction dans SQL Server vous permet de vérifier un objet pour une propriété spécifique.

Vous pouvez utiliser cette fonction pour vérifier si un objet est une table système ou non. Pour ce faire, passez l'ID de l'objet comme premier argument, et IsSystemTable comme deuxième argument. La fonction renvoie un 1 ou un 0 selon qu'il s'agit ou non d'une table système (1 signifie qu'il est une table système, et 0 signifie que ce n'est pas le cas).

Exemple 1 - Utilisation de base

Voici un exemple rapide à démontrer.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Résultat :

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

Dans ce cas, l'objet est une table système.

Exemple 2 - L'objet n'est PAS une table système

Voici ce qui se passe lorsque l'objet n'est pas une table système.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Résultat :

+-----------------+
| IsSystemTable   |
|-----------------|
| 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 table définie par l'utilisateur, donc j'obtiens un résultat négatif.

Le voici à nouveau en utilisant OBJECT_ID() pour obtenir l'ID à partir du nom de l'objet.

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

Résultat :

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

J'ai également vérifié si l'objet est une table définie par l'utilisateur, et le résultat est positif.

Exemple 3 - 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'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') 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.