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.