Database
 sql >> Database >  >> RDS >> Database

Comando roba T-SQL

L'idea principale attorno alla funzione di SQL Server denominata STUFF è concatenare più colonne in una singola colonna con maggiore flessibilità rispetto a quella fornita dalla funzione CONCAT. Inoltre, STUFF può essere combinato con altre tecniche per alcuni effetti interessanti.

In questo articolo esploreremo le possibilità che il comando STUFF offre agli specialisti di database SQL.

La funzione STUFF di T-SQL

Diamo prima un'occhiata alla definizione ufficiale Microsoft della funzione STUFF:

La funzione STUFF inserisce una stringa in un'altra stringa. Elimina una lunghezza di caratteri specificata nella prima stringa nella posizione iniziale e quindi inserisce la seconda stringa nella prima stringa nella posizione iniziale.

Pertanto, quando si utilizza il comando STUFF, si riorganizzano i dati della colonna.

Diamo un'occhiata ad alcuni esempi.

Il primo è l'output del comando STUFF:la stringa ABCDEFG originale verrà riempita con la stringa XXX.

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

Analizzeremo questo output per comprendere appieno il comando STUFF:

Ora, il terzo parametro è aumentato a valori di 4,5,6.

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

Spiegazioni sulla chiamata di funzione

La sostituzione avviene al terzo carattere della stringa ABCDEFG originale in ogni esecuzione. L'unica differenza è il numero di caratteri specificato da eliminare tramite il parametro lunghezza eliminazione .

Pertanto, quando cancella lunghezza parametro dalla posizione iniziale parametro è più lungo della stringa originale, i dati vengono troncati.

Ad esempio, la nostra stringa originale è lunga 7 caratteri. La funzione STUFF inizia dalla posizione 3 e funziona per altri 5 caratteri. Poiché 8 è maggiore della lunghezza della stringa originale di 7, il valore viene restituito come ABXXX.

Utilizzo multiplo di STUFF nella stessa query

È possibile annidare il comando STUFF all'interno di un altro comando STUFF e utilizzarlo tutte le volte che è necessario. Tuttavia, dovresti considerare come influisce sulle query a livello di produzione. Ogni chiamata nidificata viene eseguita per ogni riga dei dati restituiti.

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

In questo esempio, il primo carattere della stringa originale viene sostituito dal carattere 1 e l'ultimo dal carattere 7.

STUFF e ForXML

ForXML è una funzionalità di SQL Server che può trasformare i set di risultati delle query SQL in risultati formattati XML.

STUFF può anche essere combinato con altre funzionalità di SQL Server come ForXML. Aiuta a consolidare i dati a scopo di reporting. Prendiamo la seguente struttura della tabella:

Supponiamo di volere un rapporto con 2 colonne. La prima colonna è USER_NAME e il secondo è un ruolo separato da virgole colonna per ogni ruolo ricoperto dall'utente. Come potrebbe essere realizzato in puro T-SQL?

Costruisci la struttura della tabella e inserisci i dati:

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 il comando STUFF:

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

In questo esempio, una query interna viene unita a ogni USER_ID. Il comando STUFF viene utilizzato per sostituire la virgola iniziale. Di conseguenza, abbiamo un bell'elenco separato da virgole di ciascun utente con i rispettivi ruoli.

Casi d'uso

Mascheramento dei dati

SQL Server offre soluzioni per il mascheramento dinamico dei dati. Tuttavia, STUFF potrebbe essere utilizzato per offuscare i dati sensibili quando vengono visualizzati. Immagina una vista in cima a un tavolo con campi PII del cliente come SSN. La vista potrebbe utilizzare il comando STUFF per mascherare tutto tranne le ultime 4 cifre del SSN.

Consolidamento dei dati

Come dimostrato con FORXML e STUFF, T-SQL offre la possibilità di consolidare i dati in singole colonne con una sorta di identificatore primario. In questo esempio, era USER_NAME. Tuttavia, questo tipo di analisi è piuttosto comune nell'architettura di reporting del database.

Riepilogo

Pertanto, abbiamo trattato i parametri del comando STUFF in T-SQL e abbiamo capito come questo comando si confronta con CONCAT. Abbiamo dimostrato esempi sia semplici che complessi del comando STUFF ed elencato alcuni casi d'uso per i quali STUFF può essere applicabile.

È un comando prezioso che può essere un ottimo strumento da avere sotto la cintura. Si prega di commentare con altri casi d'uso per il comando STUFF.