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.