Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ANSI_NULLS und QUOTED_IDENTIFIER haben Dinge getötet. Wofür sind sie?

OK, aus der Sicht eines Anwendungsentwicklers machen diese Einstellungen Folgendes:

QUOTED_IDENTIFIER

Diese Einstellung steuert, wie ".." in Anführungszeichen gesetzt wird werden vom SQL-Compiler interpretiert. Wenn QUOTED_IDENTIFIER eingeschaltet ist, werden Anführungszeichen wie Klammern behandelt ([...] ) und kann verwendet werden, um SQL-Objektnamen wie Tabellennamen, Spaltennamen usw. in Anführungszeichen zu setzen. Wenn es ausgeschaltet ist (nicht empfohlen), werden Anführungszeichen wie Apostrophe behandelt ('..'). ) und kann verwendet werden, um Textstrings in SQL-Befehlen in Anführungszeichen zu setzen.

ANSI_NULLS

Diese Einstellung steuert, was passiert, wenn Sie versuchen, einen anderen Vergleichsoperator als IS zu verwenden auf NULL. Wenn es eingeschaltet ist, folgen diese Vergleiche dem Standard, der besagt, dass der Vergleich mit NULL immer fehlschlägt (weil es kein Wert, sondern ein Flag ist) und FALSE zurückgibt . Wenn diese Einstellung AUS ist (wirklich nicht empfohlen) können Sie es erfolgreich wie einen Wert behandeln und = verwenden , <> , usw. darauf und geben Sie gegebenenfalls TRUE zurück.

Der richtige Weg, dies zu handhaben, besteht darin, stattdessen IS zu verwenden (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Diese Einstellung steuert, ob NULLen "weitergegeben" werden, wenn sie in Zeichenfolgenausdrücken verwendet werden. Wenn diese Einstellung aktiviert ist, folgt sie dem Standard und einem Ausdruck wie 'some string' + NULL .. gibt immer NULL zurück. Daher kann in einer Reihe von Zeichenfolgenverkettungen eine NULL dazu führen, dass der gesamte Ausdruck NULL zurückgibt. Wenn Sie dies ausschalten (ebenfalls nicht empfohlen), werden die NULL-Werte stattdessen wie leere Zeichenfolgen behandelt, also 'some string' + NULL wird einfach zu 'some string' ausgewertet .

Der richtige Weg, dies zu handhaben, ist die Funktion COALESCE (oder ISNULL):'some string' + COALESCE(NULL, '') .. .