SET CONCAT_NULL_YIELDS_NULL in SQL Server

Wie oft denken wir an NULL-Werte, während NULL-Werte mit String-Werten verknüpft werden? String-Konzentration mit NULL-Werten kann zu unerwarteten Ergebnissen führen, wenn die SET-Optionen der Datenbank CONCAT_NULL_YIELDS_NULL nicht bekannt sind.

CONCAT_NULL_YIELDS_NULL Optionen steuern, ob Verkettungsergebnisse als NULL- oder leere Zeichenfolgenwerte behandelt werden sollen.

Ein wichtiger Hinweis aus der SQL Server-Onlinedokumentation

In einer zukünftigen Version von SQL Server ist CONCAT_NULL_YIELDS_NULL immer aktiviert, und alle Anwendungen, die die Option explizit auf OFF setzen, erzeugen einen Fehler. Vermeiden Sie die Verwendung dieser Funktion in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die diese Funktion derzeit verwenden.

Syntax

SET CONCAT_NULL_YIELDS_NULL {ON | AUS } 

Beschreibung

SET CONCAT_NULL_YIELDS_NULL ON

Wenn die Datenbankoption CONCAT_NULL_YIELDS_NULL in ON ist, führt die Verkettung eines Zeichenfolgenwerts mit NULL zu NULL als Ausgabe. Wenn CONCAT_NULL_YIELDS_NULL als ON festgelegt ist, werden NULL-Werte als UNKNOWN betrachtet. Daher wird ein String-Wert mit UNKNOWN-Erträgen in UNKNOWN, NULL, als Ausgabe verknüpft.

Beispiel:

SET CONCAT_NULL_YIELDS_NULL ON; SELECT 'Tech-Rezepte' + NULL; --Ergebnis in NULL. 

SET CONCAT_NULL_YIELDS_NULL auf OFF setzen

Wenn die Datenbankoption CONCAT_NULL_YIELDS_NULL in OFF ist, wird beim Verketten eines Zeichenfolgenwerts mit NULL eine Zeichenfolge als Ausgabe zurückgegeben. Wenn wir CONCAT_NULL_YIELDS_NULL als OFF haben, werden NULL-Werte als leere Zeichenfolge betrachtet. Wenn Sie also einen Zeichenfolgenwert mit leerer Zeichenfolge verketten, wird die Ausgabe in einer Zeichenfolge ausgegeben, da dies als TRUE und nicht als UNKNOWN betrachtet wird.

Beispiel:

SET CONCAT_NULL_YIELDS_NULL AUS; SELECT 'Tech-Rezepte' + NULL; - führt zu "Tech-Rezepten". 

In zukünftigen Versionen von SQL Server wird die gesetzte Option CONCAT_NULL_YIELDS_NULL nicht mehr unterstützt. Daher sollten wir es in zukünftigen Entwicklungsarbeiten nicht verwenden. Wir können das verwenden ISNULL oder COALESCE Funktion, um das Verhalten von NULL-Werten bei der Verkettung von Zeichenfolgen zu behandeln. Es ist auch ratsam zu verwenden CONCAT-Funktion mit der SQL Server 2012 Edition eingeführte Zeichenfolgen, die die Verkettung von NULL-Werten perfekt verarbeiten.

Verwenden Sie die CONCAT / ISNULL / COALESCE-Funktion anstelle von CONCAT_NULL_YIELDS_NULL

Die folgenden Beispiele müssen beim Schreiben von Code beachtet werden, anstatt die Datenbankoptionen CONCAT_NULL_YIELDS_NULL zu verwenden und Strings zu verketten.

DECLARE @ MyVar1 als VARCHAR (50) = 'You are', @ MyVar2 als VARCHAR (50) = NULL, @ MyVar3 als VARCHAR (50) = 'on tech-recipes.com'; SELECT CONCAT (@ MyVar1, @ MyVar2, @ MyVar3); 

Im obigen Beispiel verwenden wir die mit SQL Server 2012 eingeführte CONCAT-Funktion. Sie wird NULL in der @ MyVar2-Variablen als leere Zeichenfolge behandeln, während Zeichenfolgen verkettet werden. Es ist immer besser, diese Funktion zu verwenden, anstatt mit der Setoption CONCAT_NULL_YIELDS_NULL zu spielen, um Codeänderungen zu vermeiden, da diese Einstellung veraltet wird.

DECLARE @ MyVar1 als VARCHAR (50) = 'You are', @ MyVar2 als VARCHAR (50) = NULL, @ MyVar3 als VARCHAR (50) = 'on tech-recipes.com'; SELECT ISNULL (@ MyVar1, ") + ISNULL (@ MyVar2,") + ISNULL (@ MyVar3, "); 

Im obigen Beispiel verwenden wir die ISNULL-Funktion, um alle NULL-Vorkommen mit einer leeren Zeichenfolge zu überprüfen und zu ersetzen, anstatt die Einstellung CONCAT_NULL_YIELDS_NULL zu verwenden. Anstelle von ISNULL können wir auch die ANSI-Funktion COALESCE verwenden.