SET CONCAT_NULL_YIELDS_NULL in SQL Server

Quanto spesso pensiamo ai valori NULL mentre concateniamo NULL con valori stringa? La concentrazione di stringhe con valori NULL può darci dei risultati inattesi se non siamo a conoscenza delle opzioni SET del database CONCAT_NULL_YIELDS_NULL.

CONCAT_NULL_YIELDS_NULL le opzioni controllano se i risultati della concatenazione devono essere trattati come valori NULL o stringa vuota.

Una nota importante della documentazione in linea di SQL Server

In una versione futura di SQL Server, CONCAT_NULL_YIELDS_NULL sarà sempre ON e tutte le applicazioni che impostano esplicitamente l'opzione su OFF genereranno un errore. Evitare l'uso di questa funzione in un nuovo lavoro di sviluppo e pianificare di modificare le applicazioni che attualmente utilizzano questa funzione.

Sintassi

SET CONCAT_NULL_YIELDS_NULL {ON | OFF} 

Descrizione

SET CONCAT_NULL_YIELDS_NULL ON

Quando l'opzione del database CONCAT_NULL_YIELDS_NULL in ON, concatenando un valore di stringa con NULL, verrà generato NULL come output. Quando abbiamo CONCAT_NULL_YIELDS_NULL come ON, i valori NULL sono considerati come UNKNOWN, quindi concatenando un valore di stringa con i risultati di UNKNOWN in UNKNOWN, NULL come output.

Esempio:

SET CONCAT_NULL_YIELDS_NULL ON; SELEZIONA 'tech-recipes' + NULL; --risulta in NULL. 

SET CONCAT_NULL_YIELDS_NULL OFF

Quando l'opzione del database CONCAT_NULL_YIELDS_NULL in OFF, concatenando un valore stringa con NULL restituirà una stringa come output. Quando abbiamo CONCAT_NULL_YIELDS_NULL come OFF, i valori NULL sono considerati come una stringa vuota, quindi concatenare un valore di stringa con una stringa vuota restituisce una stringa come output perché è considerato come TRUE invece di UNKNOWN.

Esempio:

SET CONCAT_NULL_YIELDS_NULL OFF; SELEZIONA 'tech-recipes' + NULL; - risultati in "ricette tecniche". 

Nelle versioni future di SQL Server, l'opzione set CONCAT_NULL_YIELDS_NULL sarà deprecata. Pertanto, dovremmo evitare di usarlo nel lavoro di sviluppo futuro. Possiamo usare il ISNULL o COALESCE funzione per gestire il comportamento dei valori NULL mentre concatenano le stringhe. È anche consigliabile l'uso Funzione CONCAT concatenare le stringhe introdotte con l'edizione di SQL Server 2012 che gestisce perfettamente la concatenazione dei valori NULL.

Utilizzare la funzione CONCAT / ISNULL / COALESCE anziché CONCAT_NULL_YIELDS_NULL

I seguenti esempi devono essere seguiti durante la scrittura del codice anziché utilizzare le opzioni del database CONCAT_NULL_YIELDS_NULL mentre si concatenano le stringhe.

DICHIARATE @ MyVar1 come VARCHAR (50) = 'Tu sei', @ MyVar2 come VARCHAR (50) = NULL, @ MyVar3 come VARCHAR (50) = 'su tech-recipes.com'; SELEZIONA CONCAT (@ MyVar1, @ MyVar2, @ MyVar3); 

Nell'esempio sopra, stiamo usando la funzione CONCAT introdotta con SQL Server 2012. Tratterà NULL nella variabile @ MyVar2 come una stringa vuota mentre concatenano le stringhe. È sempre preferibile utilizzare questa funzione invece di giocare con l'opzione set CONCAT_NULL_YIELDS_NULL per evitare modifiche al codice in quanto questa impostazione sarà deprecata.

DICHIARATE @ MyVar1 come VARCHAR (50) = 'Tu sei', @ MyVar2 come VARCHAR (50) = NULL, @ MyVar3 come VARCHAR (50) = 'su tech-recipes.com'; SELEZIONA ISNULL (@ MyVar1, ") + ISNULL (@ MyVar2,") + ISNULL (@ MyVar3, "); 

Nell'esempio sopra, stiamo utilizzando la funzione ISNULL per controllare e sostituire qualsiasi occorrenza NULL con una stringa vuota invece di utilizzare l'impostazione CONCAT_NULL_YIELDS_NULL. Possiamo usare anche la funzione ANSI COALESCE invece di ISNULL.