В SQL Server можете да използвате PARSENAME()
функция за връщане на част от име на обект.
Например, можете да го използвате, за да върнете частта на схемата (или всяка друга част) от име от четири части, като server.schema.db.object
.
Синтаксис
Синтаксисът е така:
PARSENAME ( 'object_name' , object_piece )
Където object_name
е името (по избор) на обекта и object_piece
е частта, която искате да бъде върната.
object_piece
аргументът трябва да е int между 1 и 4. Стойността определя коя част от името на обекта да се върне. Тези стойности съответстват на частта на обекта, както следва:
Стойност | Обектна част |
---|---|
1 | Име на обект |
2 | Име на схема |
3 | Име на базата данни |
4 | Име на сървъра |
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT PARSENAME('Homer.dbo.Music.Artists', 4) КАТО Резултат;
Резултат:
+---------+| Резултат ||----------|| Омир |+----------+
В този случай върнах името на сървъра от име на обект от четири части, състоящо се от сървър, схема, база данни и име на таблица.
Пример 2 – Връщане на всички части
Ето как изглежда, ако върна всички части поотделно.
DECLARE @object_name char(23) ='Homer.dbo.Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Схема], PARSENAME(@object_name , 2) AS [База данни], PARSENAME(@object_name, 1) AS [Object];
Резултат:
+----------+-----------+-----------+---------+ | Сървър | Схема | База данни | Обект ||----------+-----------+-----------+----------|| Омир | dbo | Музика | Художници |+----------+-----------+-----------+---------+предварително>Пример 3 – SQL Server не проверява името
Важно е да знаете, че
PARSENAME()
не показва дали съществува обект с посоченото име. Той просто връща определената част от даденото име на обекта.Следователно можете да предадете всяка стойност на функцията, стига да е валидно име на система .
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 [База данни], PARSENAME(@object_name, 1) AS [Object];Резултат:
+------------+-----------+-----------+--------- -+| Сървър | Схема | База данни | Обект ||------------+----------+------------+---------- || напълно | фалшиво | обект | име |+------------+-----------+------------+---------- +Пример 4 – Име на обект от три части
Ето какво се случва, ако предам име от три части.
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 [База данни], PARSENAME(@object_name, 1) AS [Object];Резултат:
+----------+-----------+-----------+---------+ | Сървър | Схема | База данни | Обект ||----------+-----------+-----------+----------|| NULL | dbo | Музика | Художници |+----------+-----------+-----------+---------+предварително>Пример 5 – Име на обект от две части
Ето какво се случва, ако предам име от две части.
DECLARE @object_name char(13) ='Music.Artists';SELECT PARSENAME(@object_name, 4) AS [Server], PARSENAME(@object_name, 3) AS [Схема], PARSENAME(@object_name, 2) AS [База данни], PARSENAME(@object_name, 1) КАТО [Обект];Резултат:
+----------+-----------+-----------+---------+ | Сървър | Схема | База данни | Обект ||----------+-----------+-----------+----------|| NULL | NULL | Музика | Художници |+----------+-----------+-----------+---------+предварително>Пример 6 – Име на едночастен обект
И колкото и глупаво да изглежда, едночленно име.
DECLARE @object_name char(7) ='Артисти';SELECT PARSENAME(@object_name, 4) КАТО [Сървър], PARSENAME(@object_name, 3) КАТО [Схема], PARSENAME(@object_name, 2) КАТО [База данни ], PARSENAME(@ime_object, 1) КАТО [Обект];Резултат:
+----------+-----------+-----------+---------+ | Сървър | Схема | База данни | Обект ||----------+-----------+-----------+----------|| NULL | NULL | NULL | Художници |+----------+-----------+-----------+---------+предварително>Пример 7 – Име на обект от пет части
Ето какво се случва, ако предоставите име на обект с повече от четири части.
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 [База данни], PARSENAME(@object_name, 1) AS [Object];Резултат:
+----------+-----------+-----------+---------+ | Сървър | Схема | База данни | Обект ||----------+-----------+-----------+----------|| NULL | NULL | NULL | NULL |+----------+-----------+-----------+----------+предварително>Пример 8 – Други употреби
Като се има предвид, че можете да предоставите напълно фалшиво име на обект,
PARSENAME()
може да бъде удобен хак за разделяне на други ограничени данни, като 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(@ime_object, 1) AS [1];Резултат:
+-----+-----+-----+-----+| 4 | 3 | 2 | 1 ||-----+-----+-----+-----|| 172 | 217 | 167 | 110 |+-----+-----+-----+-----+Въпреки това, ако наистина трябва да направите това, помислете за използването на различен метод, като
STRING_SPLIT()
.Пример 9 – Запетаи и други разделители
Даден е
PARSENAME()
е предназначен да се използва с имена на обекти, не можете да използвате запетаи като разделители и да очаквате да работи по същия начин.Ето какво се случва, ако се опитам да го направя.
DECLARE @object_name char(23) ='Homer,dbo,Music,Artists';ИЗБЕРЕТЕ PARSENAME(@object_name, 4) КАТО [Сървър], PARSENAME(@object_name, 3) КАТО [Схема], PARSENAME(@object_name , 2) AS [База данни], PARSENAME(@object_name, 1) AS [Object];Резултат:
+----------+-----------+-----------+----------- --------------+| Сървър | Схема | База данни | Обект ||----------+-----------+------------+----------- ------------|| NULL | NULL | NULL | Хоумър,dbo,музика,художници |+----------+----------+-----------+------ -------------------+Ще трябва да замените запетаите с точка, ако искате да направите това, или да използвате различен метод, като
STRING_SPLIT()
.