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

Découvrez si un objet est une table définie par l'utilisateur dans SQL Server avec OBJECTPROPERTY()

Vous pouvez utiliser le OBJECTPROPERTY() fonction dans SQL Server pour vérifier si un objet est une table définie par l'utilisateur ou non.

Pour ce faire, passez l'ID de l'objet comme premier argument, et IsUserTable comme deuxième argument. La fonction renvoie un 1 ou un 0 selon qu'il s'agit ou non d'une table définie par l'utilisateur.

Une valeur de retour de 1 signifie qu'il est une table définie par l'utilisateur 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 WideWorldImportersDW;SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];

Résultat :

+---------------+| IsUserTable ||---------------|| 1 |+---------------+

Dans ce cas, le WideWorldImportersDW la base de données a un objet avec l'ID fourni, et c'est une table définie par l'utilisateur.

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('Dimension.City'), 'IsUserTable') AS [IsUserTable] ;

Résultat :

+---------------+| IsUserTable ||---------------|| 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 [ID d'objet], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable] ;

Résultat :

+-------------+---------------+| ID d'objet | IsUserTable ||--------------------+---------------|| 1013578649 | 1 |+-------------+---------------+

Exemple 3 - Lorsque l'objet n'est PAS une table définie par l'utilisateur

Voici ce qui se passe lorsque l'objet n'est pas une table utilisateur.

SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable] ;

Résultat :

+---------------+| IsUserTable ||---------------|| 0 |+---------------+

Dans ce cas, la base de données fait avoir un objet avec cet ID, mais l'objet est en fait une procédure stockée (pas une table définie par l'utilisateur), donc j'obtiens un résultat négatif.

Le voici à nouveau en utilisant OBJECT_ID() .

SELECT OBJECT_ID('Sequences.ReseedAllSequences') AS [ID d'objet], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), ' IsProcedure') AS [IsProcedure];

Résultat :

+-------------+---------------+---------------+ | ID d'objet | EstTableUtilisateur | EstProcédure ||-------------+---------------+---------------|| 402100473 | 0 | 1 |+-------------+---------------+---------------+ 

J'ai également vérifié si l'objet est une procédure stockée, 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'), 'IsUserTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') AS [12345678];

Résultat :

+-----------------+------------+| Objetinvalide | 12345678 ||------------+------------|| NUL | 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.