sql >> Database >  >> RDS >> Sqlserver

Gebruik PARSENAME() om een ​​deel van een objectnaam terug te geven in SQL Server

In SQL Server kunt u de PARSENAME() . gebruiken functie om een ​​deel van een objectnaam terug te geven.

U kunt het bijvoorbeeld gebruiken om het schemagedeelte (of een ander gedeelte) van een vierdelige naam te retourneren, zoals server.schema.db.object .

Syntaxis

De syntaxis gaat als volgt:

PARSENAME ( 'object_name' , object_piece )

Waar object_name is de (optioneel gekwalificeerde) objectnaam en object_piece is het onderdeel dat u wilt retourneren.

Het object_piece argument moet een int . zijn tussen 1 en 4. De waarde bepaalt welk deel van de objectnaam moet worden geretourneerd. Deze waarden komen als volgt overeen met het objectgedeelte:

Waarde Objectdeel
1 Objectnaam
2 Schemanaam
3 Databasenaam
4 Servernaam

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

SELECT PARSENAME('Homer.dbo.Music.Artists', 4) AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| Homer    |
+----------+

In dit geval heb ik de servernaam geretourneerd van een vierdelige objectnaam, bestaande uit de server, het schema, de database en de tabelnaam.

Voorbeeld 2 – Alle onderdelen retourneren

Zo ziet het eruit als ik alle onderdelen apart retourneer.

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];

Resultaat:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| Homer    | dbo      | Music      | Artists  |
+----------+----------+------------+----------+

Voorbeeld 3 – SQL Server controleert de naam niet

Het is belangrijk om te weten dat PARSENAME() geeft niet aan of een object met de opgegeven naam bestaat. Het retourneert alleen het gespecificeerde deel van de gegeven objectnaam.

Daarom kun je elke waarde aan de functie doorgeven, zolang het maar een geldige sysname is .

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];

Resultaat:

+------------+----------+------------+----------+
| Server     | Schema   | Database   | Object   |
|------------+----------+------------+----------|
| completely | bogus    | object     | name     |
+------------+----------+------------+----------+

Voorbeeld 4 – Driedelige objectnaam

Dit is wat er gebeurt als ik een driedelige naam doorgeef.

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];

Resultaat:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | dbo      | Music      | Artists  |
+----------+----------+------------+----------+

Voorbeeld 5 – Tweedelige objectnaam

Dit is wat er gebeurt als ik een tweedelige naam doorgeef.

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];

Resultaat:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | Music      | Artists  |
+----------+----------+------------+----------+

Voorbeeld 6 – Eendelige objectnaam

En, hoe gek het ook mag lijken, een eendelige naam.

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 [Object];

Resultaat:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | NULL       | Artists  |
+----------+----------+------------+----------+

Voorbeeld 7 – Vijfdelige objectnaam

Dit gebeurt er als je een objectnaam met meer dan vier delen opgeeft.

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];

Resultaat:

+----------+----------+------------+----------+
| Server   | Schema   | Database   | Object   |
|----------+----------+------------+----------|
| NULL     | NULL     | NULL       | NULL     |
+----------+----------+------------+----------+

Voorbeeld 8 – Ander gebruik

Aangezien u een volledig valse objectnaam kunt opgeven, PARSENAME() kan een handige hack zijn voor het splitsen van andere gescheiden gegevens, zoals IP4-adressen.

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];

Resultaat:

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

Als u dit echter echt moet doen, overweeg dan een andere methode te gebruiken, zoals STRING_SPLIT() .

Voorbeeld 9 – Komma's en andere scheidingstekens

Gegeven PARSENAME() is bedoeld om te worden gebruikt met objectnamen, u kunt geen komma's als scheidingstekens gebruiken en verwachten dat het hetzelfde werkt.

Dit is wat er gebeurt als ik dat probeer.

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];

Resultaat:

+----------+----------+------------+-------------------------+
| Server   | Schema   | Database   | Object                  |
|----------+----------+------------+-------------------------|
| NULL     | NULL     | NULL       | Homer,dbo,Music,Artists |
+----------+----------+------------+-------------------------+

Je moet de komma's vervangen door een punt als je dat wilt doen, of een andere methode gebruiken, zoals STRING_SPLIT() .


  1. Dubbele sleutels negeren tijdens 'kopiëren van' in postgresql

  2. MySQL stoppen/starten met MySQL Workbench

  3. Selecteer de tweede meest minimale waarde in Oracle

  4. SQL WHERE-instructie