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

Utiliser PARSENAME() pour renvoyer une partie d'un nom d'objet dans SQL Server

Dans SQL Server, vous pouvez utiliser le PARSENAME() fonction pour renvoyer une partie d'un nom d'objet.

Par exemple, vous pouvez l'utiliser pour renvoyer la partie schéma (ou toute autre partie) d'un nom en quatre parties tel que server.schema.db.object .

Syntaxe

La syntaxe ressemble à ceci :

PARSENAME ( 'object_name' , object_piece )

object_name est le nom de l'objet (éventuellement qualifié) et object_piece est la pièce que vous voulez retourner.

Le object_piece l'argument doit être un int entre 1 et 4. La valeur détermine la partie du nom de l'objet à renvoyer. Ces valeurs correspondent à la partie objet comme suit :

Valeur Partie d'objet
1 Nom de l'objet
2 Nom du schéma
3 Nom de la base de données
4 Nom du serveur

Exemple 1 - Utilisation de base

Voici un exemple pour illustrer.

SELECT PARSENAME('Homer.dbo.Music.Artists', 4) COMME résultat ;

Résultat :

+----------+| Résultat ||----------|| Homère |+----------+

Dans ce cas, j'ai renvoyé le nom du serveur à partir d'un nom d'objet en quatre parties composé du serveur, du schéma, de la base de données et du nom de la table.

Exemple 2 – Renvoyer toutes les pièces

Voici à quoi cela ressemble si je renvoie toutes les pièces séparément.

DECLARE @object_name char(23) ='Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+----------+----------+------------+----------+ | Serveur | Schéma | Base de données | Objet ||----------+----------+------------+----------|| Homère | dbo | Musique | Artistes |+----------+----------+-----------+----------+ 

Exemple 3 – SQL Server ne vérifie pas le nom

Il est important de savoir que PARSENAME() n'indique pas si un objet portant le nom spécifié existe. Il renvoie simplement la partie spécifiée du nom d'objet donné.

Par conséquent, vous pouvez transmettre n'importe quelle valeur à la fonction, tant qu'il s'agit d'un sysname valide .

DECLARE @object_name char(28) ='completely.bogus.object.name';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+------------+----------+------------+--------- -+| Serveur | Schéma | Base de données | Objet ||------------+----------+------------+---------- || complètement | faux | objet | nom |+------------+----------+------------+---------- +

Exemple 4 - Nom d'objet en trois parties

Voici ce qui se passe si je passe un nom en trois parties.

DECLARE @object_name char(17) ='dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2 ) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+----------+----------+------------+----------+ | Serveur | Schéma | Base de données | Objet ||----------+----------+------------+----------|| NUL | dbo | Musique | Artistes |+----------+----------+-----------+----------+ 

Exemple 5 - Nom d'objet en deux parties

Voici ce qui se passe si je passe un nom en deux parties.

DECLARE @object_name char(13) ='Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+----------+----------+------------+----------+ | Serveur | Schéma | Base de données | Objet ||----------+----------+------------+----------|| NUL | NUL | Musique | Artistes |+----------+----------+-----------+----------+ 

Exemple 6 - Nom d'objet en une partie

Et, aussi idiot que cela puisse paraître, un nom en une partie.

DECLARE @object_name char(7) ='Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name, 2) AS [Database ], PARSENAME(@object_name, 1) AS [Objet] ;

Résultat :

+----------+----------+------------+----------+ | Serveur | Schéma | Base de données | Objet ||----------+----------+------------+----------|| NUL | NUL | NUL | Artistes |+----------+----------+-----------+----------+ 

Exemple 7 - Nom d'objet en cinq parties

Voici ce qui se passe si vous fournissez un nom d'objet avec plus de quatre parties.

DECLARE @object_name char(23) ='Oops.Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME( @object_name, 2) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+----------+----------+------------+----------+ | Serveur | Schéma | Base de données | Objet ||----------+----------+------------+----------|| NUL | NUL | NUL | NULL |+----------+----------+------------+----------+ 

Exemple 8 - Autres utilisations

Étant donné que vous pouvez fournir un nom d'objet complètement faux, PARSENAME() peut être un hack pratique pour diviser d'autres données délimitées, telles que les adresses IP4.

DECLARE @object_name char(15) ='172.217.167.110';SELECT PARSENAME(@object_name, 4) AS [4], PARSENAME(@object_name, 3) AS [3], PARSENAME(@object_name, 2) AS [2], PARSENAME(@object_name, 1) AS [1] ;

Résultat :

+-----+-----+-----+-----+| 4 | 3 | 2 | 1 ||-----+-----+-----+-----|| 172 | 217 | 167 | 110 |+-----+-----+-----+-----+

Cependant, si vous avez vraiment besoin de le faire, envisagez d'utiliser une méthode différente, telle que STRING_SPLIT() .

Exemple 9 - Virgules et autres délimiteurs

Étant donné PARSENAME() est destiné à être utilisé avec des noms d'objets, vous ne pouvez pas utiliser des virgules comme délimiteurs et vous attendre à ce qu'il fonctionne de la même manière.

Voici ce qui se passe si j'essaie de le faire.

DECLARE @object_name char(23) ='Homer,dbo,Music,Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schema], PARSENAME(@object_name , 2) AS [Database], PARSENAME(@object_name, 1) AS [Object] ;

Résultat :

+----------+----------+------------+----------- --------------+| Serveur | Schéma | Base de données | Objet ||----------+----------+------------+------------ --------------|| NUL | NUL | NUL | Homer,dbo,Musique,Artistes |+----------+----------+------------+------ -------------------+

Vous devrez remplacer les virgules par un point si vous voulez le faire, ou utiliser une méthode différente, telle que STRING_SPLIT() .