V SQL Server můžete použít PARSENAME()
funkce, která vrátí část názvu objektu.
Můžete jej například použít k vrácení části schématu (nebo jakékoli jiné části) názvu čtyř částí, jako je server.schema.db.object
.
Syntaxe
Syntaxe vypadá takto:
PARSENAME ( 'object_name' , object_piece )
Kde object_name
je (volitelně kvalifikovaný) název objektu a object_piece
je část, kterou chcete vrátit.
object_piece
argument musí být int mezi 1 a 4. Hodnota určuje, která část názvu objektu se má vrátit. Tyto hodnoty odpovídají části objektu následovně:
Hodnota | Část objektu |
---|---|
1 | Název objektu |
2 | Název schématu |
3 | Název databáze |
4 | Název serveru |
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT PARSENAME('Homer.dbo.Music.Artists', 4) AS Result;
Výsledek:
+-----------+| Výsledek ||-----------|| Homer |+----------+
V tomto případě jsem vrátil název serveru ze čtyřdílného názvu objektu sestávajícího ze serveru, schématu, databáze a názvu tabulky.
Příklad 2 – Vrácení všech dílů
Takto to vypadá, když vrátím všechny díly samostatně.
DECLARE @object_name char(23) ='Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schéma], PARSENAME (@object_name , 2) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];
Výsledek:
+----------+----------+------------+----------+ | Server | Schéma | Databáze | Objekt ||----------+----------+------------+----------|| Homer | dbo | Hudba | Umělci |+----------+----------+------------+----------+Příklad 3 – SQL Server nezkontroluje název
Je důležité vědět, že
PARSENAME()
neoznačuje, zda objekt se zadaným názvem existuje. Pouze vrací zadanou část z daného názvu objektu.Funkci tedy můžete předat libovolnou hodnotu, pokud je to platný sysname .
DECLARE @object_name char(28) ='completely.bogus.object.name';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME (@object_name, 3) AS [Schéma], PARSENAME (@object_name , 2) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+------------+----------+------------+--------- -+| Server | Schéma | Databáze | Objekt ||------------+----------+------------+----------- || úplně | falešný | objekt | jméno |+------------+----------+------------+----------- +Příklad 4 – Třídílný název objektu
Zde je to, co se stane, když předám třídílné jméno.
DECLARE @object_name char(17) ='dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schéma], PARSENAME(@object_name, 2 ) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+----------+----------+------------+----------+ | Server | Schéma | Databáze | Objekt ||----------+----------+------------+----------|| NULL | dbo | Hudba | Umělci |+----------+----------+------------+----------+Příklad 5 – Název dvoudílného objektu
Zde je to, co se stane, když předám dvoudílné jméno.
DECLARE @object_name char(13) ='Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME (@object_name, 3) AS [Schéma], PARSENAME(@object_name, 2) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+----------+----------+------------+----------+ | Server | Schéma | Databáze | Objekt ||----------+----------+------------+----------|| NULL | NULL | Hudba | Umělci |+----------+----------+------------+----------+Příklad 6 – Jednodílný název objektu
A, jakkoli se to může zdát hloupé, jednodílné jméno.
DECLARE @object_name char(7) ='Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Schéma], PARSENAME(@object_name, 2) AS [Database ], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+----------+----------+------------+----------+ | Server | Schéma | Databáze | Objekt ||----------+----------+------------+----------|| NULL | NULL | NULL | Umělci |+----------+----------+------------+----------+Příklad 7 – Pětidílný název objektu
Zde je to, co se stane, pokud zadáte název objektu s více než čtyřmi částmi.
DECLARE @object_name char(23) ='Jejda.Homer.dbo.Music.Artists';SELECT PARSENAME(@název_objektu, 4) JAKO [Server], PARSENAME(@název_objektu, 3) JAKO [Schéma], PARSENAME( @název_objektu, 2) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+----------+----------+------------+----------+ | Server | Schéma | Databáze | Objekt ||----------+----------+------------+----------|| NULL | NULL | NULL | NULL |+----------+----------+------------+----------+Příklad 8 – Jiná použití
Vzhledem k tomu, že můžete poskytnout zcela falešný název objektu,
PARSENAME()
může být užitečným hackem pro rozdělení dalších oddělených dat, jako jsou adresy IP4.DECLARE @object_name char(15) ='172.217.167.110';SELECT PARSENAME(@název_objektu, 4) AS [4], PARSENAME(@název_objektu, 3) AS [3], PARSENAME(@název_objektu, 2) AS [2], PARSENAME(@název_objektu, 1) AS [1];Výsledek:
+-----+-----+-----+-----+| 4 | 3 | 2 | 1 ||-----+-----+-----+-----|| 172 | 217 | 167 | 110 |+-----+-----+-----+-----+Pokud to však opravdu potřebujete, zvažte použití jiné metody, například
STRING_SPLIT()
.Příklad 9 – Čárky a další oddělovače
Je dáno
PARSENAME()
je určen k použití s názvy objektů, nemůžete používat čárky jako oddělovače a očekávat, že to bude fungovat stejně.Zde je to, co se stane, když se o to pokusím.
DECLARE @object_name char(23) ='Homer,dbo,Music,Artists';SELECT PARSENAME(@název_objektu, 4) JAKO [Server], PARSENAME(@název_objektu, 3) JAKO [Schéma], PARSENAME (@název_objektu , 2) AS [Databáze], PARSENAME(@název_objektu, 1) AS [Objekt];Výsledek:
+----------+----------+------------+------------ ---------------+| Server | Schéma | Databáze | Objekt ||----------+----------+------------+------------ -------------|| NULL | NULL | NULL | Homer,dbo,Hudba,Umělci |+----------+----------+------------+------- -------------------+Pokud to chcete udělat, budete muset nahradit čárky tečkou, nebo použít jinou metodu, například
STRING_SPLIT()
.