Volver a la página principal
viernes 27 septiembre 2024
78

Cómo extraer partes de nombres completos con PARSENAME en SQL Server

¿Qué es PARSENAME y para qué se usa?

PARSENAME es una función que se usa para analizar nombres de objetos de bases de datos que siguen la estructura completa de SQL Server: Servidor.BaseDatos.Esquema.Objeto. Permite extraer fácilmente cualquiera de estas partes mediante un índice de posición. Aunque su uso principal es para obtener partes de nombres de objetos en bases de datos, también puede utilizarse para dividir cadenas con estructura delimitada por puntos (.).

Cada parte en un nombre completo se interpreta como:

1. Objeto: Nombre de la tabla o vista.

2. Esquema: Esquema al que pertenece el objeto.

3. Base de datos: Nombre de la base de datos.

4. Servidor: Nombre del servidor.

Sintaxis de PARSENAME

PARSENAME ( 'nombre_completo_del_objeto', índice )
  • nombre_completo_del_objeto: La cadena de texto que contiene el nombre completo del objeto, separada por puntos (.).
  • índice: Un número de 1 a 4 que indica qué parte del nombre se desea extraer:
  • 1: Objeto.
  • 2: Esquema.
  • 3: Base de datos.
  • 4: Servidor.

Ejemplos de uso de PARSENAME

Extraer el nombre del objeto

Supongamos que tienes un nombre completo como 'Servidor.BD.Eschema.Tabla' y quieres obtener el nombre de la tabla:

SELECT PARSENAME('Servidor.BD.Esquema.Tabla', 1) AS NombreObjeto;

Resultado:

NombreObjeto
-------------
Tabla

El índice 1 extrae la primera parte (nombre del objeto) desde la derecha.

Extraer el nombre del esquema

Si deseas obtener el nombre del esquema (Esquema):

SELECT PARSENAME('Servidor.BD.Esquema.Tabla', 2) AS NombreEsquema;

Resultado:

NombreEsquema
--------------
Esquema

El índice 2 corresponde a la segunda parte (nombre del esquema) desde la derecha.

Extraer el nombre de la base de datos

Para extraer la base de datos:

SELECT PARSENAME('Servidor.BD.Esquema.Tabla', 3) AS NombreBaseDatos;

Resultado:

NombreBaseDatos
----------------
BD

El índice 3 extrae la tercera parte (nombre de la base de datos) desde la derecha.

Extraer el nombre del servidor

Si necesitas el nombre del servidor:

SELECT PARSENAME('Servidor.BD.Esquema.Tabla', 4) AS NombreServidor;

Resultado:

NombreServidor
---------------
Servidor

El índice 4 corresponde al nombre del servidor.

Usar PARSENAME para extraer partes de una IP

Aunque PARSENAME está diseñado para nombres de objetos, también puede utilizarse con cualquier cadena delimitada por puntos, como una dirección IP:

SELECT PARSENAME('192.168.1.10', 1) AS Octeto1,
       PARSENAME('192.168.1.10', 2) AS Octeto2,
       PARSENAME('192.168.1.10', 3) AS Octeto3,
       PARSENAME('192.168.1.10', 4) AS Octeto4;

Resultado:

Octeto1 | Octeto2 | Octeto3 | Octeto4
--------|---------|---------|---------
10      | 1       | 168     | 192

En este caso, PARSENAME divide cada segmento de la IP en columnas separadas.

Validar estructura de nombres de objetos

Puedes utilizar PARSENAME para validar si un nombre de objeto tiene el formato correcto (por ejemplo, verificar si contiene solo esquema y tabla):

SELECT CASE 
           WHEN PARSENAME('BD.Esquema.Tabla', 3) IS NOT NULL THEN 'Nombre Completo'
           ELSE 'Nombre Parcial'
       END AS TipoNombre;

Resultado:

TipoNombre
------------
Nombre Completo

Esto verifica si la parte correspondiente a la base de datos (3) está presente en el nombre completo.

Consideraciones importantes

  • PARSENAME espera que los nombres estén separados por puntos (.). Si el nombre tiene más de cuatro partes o si el número de segmentos no coincide con los índices, la función devolverá NULL para las partes faltantes.
  • No es adecuada para nombres de objetos que contienen puntos (.) en alguna de las partes, ya que puede confundir el delimitador.
  • PARSENAME no valida la existencia de los objetos; solo extrae las partes basadas en la estructura de la cadena.

Referencia oficial

Para más información sobre PARSENAME, consulta la documentación oficial de Microsoft.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer