Ange CONCAT_NULL_YIELDS_NULL i SQL Server

Hur ofta tänker vi på NULL-värden när du kopplar NULLs med strängvärden? Strängkoncentration med NULL-värden kan ge oss några oväntade resultat om vi inte är medvetna om CONCAT_NULL_YIELDS_NULL databas SET-alternativ.

CONCAT_NULL_YIELDS_NULL Alternativ kontrollerar huruvida kopplingsresultat ska behandlas som NULL eller tomma strängvärden.

En viktig anteckning från SQL Server Books Online

I en framtida version av SQL Server kommer CONCAT_NULL_YIELDS_NULL alltid att vara ON, och alla program som uttryckligen ställer in alternativet till OFF kommer att generera ett fel. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

Syntax

Ange CONCAT_NULL_YIELDS_NULL {ON | AV } 

Beskrivning

Ange CONCAT_NULL_YIELDS_NULL ON

När alternativet CONCAT_NULL_YIELDS_NULL i ON, som sammanfogar ett strängvärde med NULL, resulterar NULL som en utgång. När vi har CONCAT_NULL_YIELDS_NULL som ON, betraktas NULL-värden som UNKNOWN, vilket innebär att ett strängvärde med UNKNOWN-utbyten i UNKNOWN, NULL som utgångspunkt sammanfogas.

Exempel:

Ange CONCAT_NULL_YIELDS_NULL ON; VÄLJ "tech-recept" + NULL; - Resultat i NULL. 

SET CONCAT_NULL_YIELDS_NULL OFF

När alternativet CONCAT_NULL_YIELDS_NULL i OFF, som sammanfogar ett strängvärde med NULL, returnerar en sträng som utgång. När vi har CONCAT_NULL_YIELDS_NULL som AV, anses NULL-värden som en tom sträng och därmed sammanfatta ett strängvärde med tomma strängutbyten i en sträng som utgångspunkt eftersom den anses vara TRUE istället för UNKNOWN.

Exempel:

SET CONCAT_NULL_YIELDS_NULL OFF; VÄLJ "tech-recept" + NULL; - resultat i "tech-recept". 

I framtida versioner av SQL Server kommer inställningen CONCAT_NULL_YIELDS_NULL att avbrytas. Därför bör vi undvika att använda det i framtida utvecklingsarbete. Vi kan använda ISNULL eller COALESCE funktion för att hantera uppförandet av NULL-värden medan de sammanfogade strängarna. Det är också tillrådligt att använda CONCAT-funktionen till concat strängar introducerad med SQL Server 2012-upplagan som hanterar NULL-värdena sammanlänkning perfekt.

Använd funktionen CONCAT / ISNULL / COALESCE i stället för CONCAT_NULL_YIELDS_NULL

Följande exempel måste följas när du skriver kod istället för att använda CONCAT_NULL_YIELDS_NULL databasalternativ medan sammanfogade strängar.

DECLARE @ MyVar1 som VARCHAR (50) = 'Du är', @ MyVar2 som VARCHAR (50) = NULL, @ MyVar3 som VARCHAR (50) = 'på tech-recipes.com'; VÄLJ CONCAT (@ MyVar1, @ MyVar2, @ MyVar3); 

I exemplet ovan använder vi CONCAT-funktionen som introducerades med SQL Server 2012. Den behandlar NULL i @ MyVar2-variabeln som en tom sträng medan de sammanfogade strängarna. Det är alltid bättre att använda den här funktionen istället för att spela med CONCAT_NULL_YIELDS_NULL-inställningen för att undvika kodändringar eftersom denna inställning kommer att avlägsnas.

DECLARE @ MyVar1 som VARCHAR (50) = 'Du är', @ MyVar2 som VARCHAR (50) = NULL, @ MyVar3 som VARCHAR (50) = 'på tech-recipes.com'; VÄLJ ISNULL (@ MyVar1, ") + ISNULL (@ MyVar2,") + ISNULL (@ MyVar3, "); 

I exemplet ovan använder vi ISNULL-funktionen för att kontrollera och ersätta alla NULL-händelser med en tom sträng i stället för att använda CONCAT_NULL_YIELDS_NULL-inställningen. Vi kan också använda ANSI-funktionen COALESCE i stället för ISNULL.