sql >> Base de Datos >  >> RDS >> Database

Comando de cosas T-SQL

La idea principal en torno a la función de SQL Server llamada STUFF es concatenar varias columnas en una sola columna con más flexibilidad que la que proporcionaría la función CONCAT. Además, STUFF se puede combinar con otras técnicas para obtener algunos efectos interesantes.

En este artículo, exploraremos las posibilidades que ofrece el comando STUFF para los especialistas en bases de datos SQL.

Función T-SQL COSAS

Primero echemos un vistazo a la definición oficial de Microsoft de la función STUFF:

La función STUFF inserta una cadena dentro de otra cadena. Elimina una longitud específica de caracteres en la primera cadena en la posición de inicio y luego inserta la segunda cadena en la primera cadena en la posición de inicio.

Por lo tanto, cuando usa el comando STUFF, está reorganizando los datos de la columna.

Echemos un vistazo a algunos ejemplos.

El primero es el resultado del comando STUFF:la cadena ABCDEFG original se rellenará con la cadena XXX.

SELECT STUFF('ABCDEFG',3,3,'XXX');

Analizaremos esta salida para entender completamente el comando STUFF:

Ahora, el tercer parámetro se incrementa a valores de 4,5,6.

SELECT STUFF('ABCDEFG',3,4,'XXX');
SELECT STUFF('ABCDEFG',3,5,'XXX');
SELECT STUFF('ABCDEFG',3,6,'XXX');

Explicaciones de llamadas de función

El reemplazo ocurre en el tercer carácter de la cadena ABCDEFG original en cada ejecución. La única diferencia es la cantidad de caracteres especificados para eliminar a través del parámetro de longitud de eliminación .

Por lo tanto, cuando eliminar longitud parámetro desde la posición inicial el parámetro es más largo que la cadena original, los datos se truncan.

Por ejemplo, nuestra cadena original tiene 7 caracteres. La función STUFF comienza en la posición 3 y se ejecuta durante 5 caracteres más. Dado que 8 es mayor que la longitud de cadena original de 7, el valor se devuelve como ABXXX.

Múltiples usos de STUFF en la misma consulta

Puede anidar el comando STUFF dentro de otro comando STUFF y utilizarlo tantas veces como sea necesario. Sin embargo, debe considerar cómo afecta las consultas de nivel de producción. Cada llamada anidada se ejecuta para cada fila de los datos devueltos.

SELECT STUFF(STUFF('ABCDEFG',1,1,'1'),7,1,'7') as StuffExample5;

En este ejemplo, el primer carácter de la cadena original se reemplaza por el carácter 1 y el último se reemplaza por el carácter 7.

COSAS y ForXML

ForXML es una característica de SQL Server que puede transformar los conjuntos de resultados de consultas SQL en resultados con formato XML.

STUFF también se puede combinar con otras funciones de SQL Server como ForXML. Ayuda a consolidar los datos con fines informativos. Tomemos la siguiente estructura de tabla:

Suponga que desea un informe con 2 columnas. La primera columna es USER_NAME , y el segundo es un role separado por comas columna para cada rol que tiene el usuario. ¿Cómo podría lograrse esto en T-SQL puro?

Cree la estructura de la tabla e inserte datos:

CREATE TABLE 
#USER
(
USER_ID INT,
USER_NAME VARCHAR(50)
)

CREATE TABLE
#USER_ROLES
(
USER_ID INT,
ROLE VARCHAR(50)
)


INSERT INTO #USER VALUES(1,'Edward')
INSERT INTO #USER VALUES(2,'John')
INSERT INTO #USER VALUES(3,'Mark')

INSERT INTO #USER_ROLES VALUES(1,'Admin')
INSERT INTO #USER_ROLES VALUES(1,'Writer')
INSERT INTO #USER_ROLES VALUES(1,'Form')
INSERT INTO #USER_ROLES VALUES(2,'Writer')
INSERT INTO #USER_ROLES VALUES(3,'Form')
INSERT INTO #USER_ROLES VALUES(3,'Writer');

Usa el comando COSAS:

SELECT 
   U.USER_NAME,
   STUFF((SELECT ',' + UR.ROLE 
          FROM #USER_ROLES UR
          WHERE UR.USER_ID = U.USER_ID
          FOR XML PATH('')), 1, 1, '') [ROLES]
FROM #USER U
GROUP BY U.USER_NAME, U.USER_ID
ORDER BY 1

En este ejemplo, se une una consulta interna a cada USER_ID. El comando STUFF se usa para reemplazar la coma inicial. Como resultado, tenemos una bonita lista separada por comas de cada usuario con sus respectivas funciones.

Casos de uso

Enmascaramiento de datos

SQL Server proporciona soluciones para el enmascaramiento dinámico de datos. Sin embargo, STUFF podría usarse para ofuscar datos confidenciales cuando se muestran. Imagine una vista sentada encima de una mesa que tiene campos de PII del cliente, como SSN. La vista podría usar el comando STUFF para enmascarar todo excepto los últimos 4 dígitos del SSN.

Consolidación de datos

Como se demostró con FORXML y STUFF, T-SQL ofrece la capacidad de consolidar datos en columnas individuales con algún tipo de identificador principal. En este ejemplo, fue USER_NAME. Sin embargo, este tipo de análisis es bastante común en la arquitectura de informes de bases de datos.

Resumen

Por lo tanto, cubrimos los parámetros del comando STUFF en T-SQL y entendimos cómo se compara este comando con CONCAT. Demostramos ejemplos simples y complejos del comando STUFF y enumeramos algunos casos de uso para los que STUFF puede ser aplicable.

Es un comando valioso que puede ser una gran herramienta para tener en su haber. Comente con otros casos de uso para el comando STUFF.