Sapevate che una funzione nativa STRING_SPLIT integrata in SQL Server è stata aggiunta in SQL Server 2016? Come consulente vedo così tanto codice che richiama una funzione scalare che viene utilizzata per dividere le variabili delimitate da stringhe in un elenco utilizzabile. Per quelli che usano questo metodo ti suggerisco di guardare questa funzione. STRING_SPLIT è una funzione con valore di tabella che restituisce una singola colonna dei vostri valori di stringa divisi dal delimitatore. Questo è un pezzo insolito di T-SQL, nel senso che il livello di compatibilità 130 o superiore è richiesto per il suo utilizzo (Microsoft non voleva indurre cambiamenti nel codice utente esistente). Usare questo metodo è molto più efficiente e può essere eseguito senza chiamare una funzione scalare.

La sintassi

STRING_SPLIT ( stringa , separatore)

Come usarlo

SELECT value AS 'Flavor' FROM STRING_SPLIT('Chocolate,Vanilla,Strawberry', ',');

Risultati

Il piano

Ecco come appare il piano. È molto semplice e diretto.

Funzione personalizzata

Ora ecco una versione fatta in casa che potete trovare in alcuni ambienti. Potete vedere che è molto meno efficiente.

/****** Object: UserDefinedFunction . Script Date: 2/11/2020 6:26:45 PM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION .( @sInputList VARCHAR(8000) -- List of delimited items , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items) RETURNS @List TABLE (item VARCHAR(8000))BEGINDECLARE @sItem VARCHAR(8000)WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0 BEGIN SELECT @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))), @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList)))) IF LEN(@sItem) > 0 INSERT INTO @List SELECT @sItem ENDIF LEN(@sInputList) > 0 INSERT INTO @List SELECT @sInputList -- Put the last item inRETURNEND

I risultati

I risultati sono gli stessi. Ma notate che il nome del vostro campo sarà sempre lo stesso, con la nuova funzione avrete un po’ più di flessibilità in questo.

Il piano

È un po’ più complicato di quello diretto che abbiamo visto sopra e include una sequenza.

Ci sono molti modi diversi di scrivere una funzione split per far funzionare le cose, tuttavia, ora che SQL Server ce ne ha data una, vi incoraggio caldamente a darle un’occhiata. Durante il tuning delle prestazioni assicuratevi di dare un’occhiata a ciò che avete sempre fatto nel vostro codice e cercate modi per migliorarlo come questo. Potete imparare di più e vedere altri esempi qui su docs.microsoft.com.

Contatta l’autore | Contatta DCAC

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *