sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo funcionan Stuff y 'For Xml Path' en SQL Server?

Así es como funciona:

1. Obtenga una cadena de elementos XML con FOR XML

Agregar FOR XML PATH al final de una consulta le permite generar los resultados de la consulta como elementos XML, con el nombre del elemento contenido en el argumento PATH. Por ejemplo, si tuviéramos que ejecutar la siguiente instrucción:

SELECT ',' + name 
              FROM temp1
              FOR XML PATH ('')

Al pasar una cadena en blanco (FOR XML PATH('')), obtenemos lo siguiente:

,aaa,bbb,ccc,ddd,eee

2. Eliminar la coma inicial con STUFF

La declaración STUFF literalmente "rellena" una cadena dentro de otra, reemplazando caracteres dentro de la primera cadena. Sin embargo, la estamos usando simplemente para eliminar el primer carácter de la lista de valores resultante.

SELECT abc = STUFF((
            SELECT ',' + NAME
            FROM temp1
            FOR XML PATH('')
            ), 1, 1, '')
FROM temp1

Los parámetros de STUFF son:

  • La cadena que se va a "rellenar" (en nuestro caso, la lista completa de nombres con una coma inicial)
  • La ubicación para comenzar a eliminar e insertar caracteres (1, estamos rellenando una cadena en blanco)
  • El número de caracteres a eliminar (1, siendo la coma inicial)

Entonces terminamos con:

aaa,bbb,ccc,ddd,eee

3. Únase a la identificación para obtener la lista completa

A continuación, simplemente unimos esto en la lista de ID en la tabla temporal, para obtener una lista de ID con nombre:

SELECT ID,  abc = STUFF(
             (SELECT ',' + name 
              FROM temp1 t1
              WHERE t1.id = t2.id
              FOR XML PATH (''))
             , 1, 1, '') from temp1 t2
group by id;

Y tenemos nuestro resultado:

Identificación Nombre 1aaa,bbb,ccc,ddd,eee

¡Espero que esto ayude!