sql >> Databáze >  >> RDS >> Sqlserver

Použijte PARSENAME() k vrácení části názvu objektu v SQL Server

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() .


  1. Funkce rozdělení v SQL Server 2008

  2. kontingenční tabulka Oracle - jak změnit položky řádků na sloupce

  3. SQL k nalezení prvního nečíselného znaku v řetězci

  4. Jak vytvořit blog v PHP a MySQL databázi - DB design