Ange ANSI_NULLS (ON | OFF) i SQL Server

De ANSI_NULLS Databas SET-alternativet styr uppförandet av Equal (=) och jämförelseoperatörer (! =) i frågor när man hanterar NULL-poster. Det är en ISO-standard för att bestämma för en fråga för att avgöra hur SQL Server ska hantera jämförelsen med NULLs.

De flesta av oss måste ha sett inställningen ANSI_NULLS (ON | OFF) i början av en lagrad procedur, funktion eller andra databasobjekt.

Viktig anteckning från SQL Server Books online:

I en framtida version av SQL Server kommer ANSI_NULLS 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 ANSI_NULLS {ON | AV } 

Ange ANSI_NULLS ON

När ANSI_NULL-databasalternativet är inställt på , då en jämförelse med NULL registrerar avkastning OKÄND. Därför returneras inga rader. Om du jämför något med NULL, kommer det att resultera som UNKNOWN, och även NULL = NULL jämförelse kommer att betraktas som okänd. Du kan inte jämföra NULL mot någonting. Detta är en ISO-standard vid hantering av NULL-poster.

Ställ in ANSI_NULLS OFF

När ANSI_NULLS-databasalternativet är inställt på AV, sedan returnerar en jämförelse med NULL-poster rader som en jämförelse som utvärderas till SANN i stället för UNKNOWN. Detta överträffar ISO-beteendet. Med ANSI_NULLS OFF resulterar jämförelsen med NULL-poster i TRUE; Därför returneras poster. När ANSI_NULLS OFF-databasalternativet används, anser SQL Server NULLs som speciella värden när man jämför med andra poster.

ANSI_NULLS Exempel

Låt oss skapa en anställd temp tabell och fylla den med några test poster.

Om OBJECT_ID ('tempdb ... #Employee') ÄR INTE NULL DROP TABLE #Employee; CREATE TABLE #Employee (ID INT IDENTITET (1, 1) PRIMÄR NYCKEL, Namn VARCHAR (100) INTE NULL, Lön INT NULL); INSERT IN #Employee VALUES ('Niraj', 125), ('Vish', 80), ('Chetan', 235), ('Imans', NULL); VÄLJ * FRÅN #Employee; 

Som vi ser ovan väljer vi alla poster från anställda tabeller och markerar NULL och NOT NULL poster.

Differentiera NULL och inte NULL-poster

- Standardmetod för att testa för NULL SELECT * FRÅN #Employee VAR Lön är NULL; VÄLJ * FRÅN #Employee VAR SÄLJNING ÄR INTE NULL; 

Exemplet ovan visar standardmetoden för att hämta NULL-poster från tabellen. Det här är det mest rekommenderade tillvägagångssättet när det gäller NULL-värden.

Ange ANSI_NULLS ON

- Ange ANSI_NULLS alternativet till ON - Returnerar inte några rader som följer ISO-beteende SET ANSI_NULLS ON SELECT * FRÅN #Employee WHERE Lön = NULL; SELECT * FROM #Employee WHERE Lön NULL; 

I exemplet ovan, ANSI_NULLS är PÅ. Därför utvärderas jämförelsen med NULL-värden som UNKNOWN, så inga rader returneras.

Ställ in ANSI_NULLS OFF

- Ange ANSI_NULLS alternativet till OFF --Returns records med NULLs Överträdande ISO-beteende SET ANSI_NULLS OFF SELECT * FRÅN #Employee WHERE Lön = NULL; SELECT * FROM #Employee WHERE Lön NULL; 

I exemplet ovan är ANSI_NULLS OFF. Därför utvärderas en jämförelse med NULL-värden som TRUE. Detta ger NULL-värden en särskild betydelse, och poster returneras av frågorna ovan.

Läs mer om databas och SQL-programmering från Tech-Recipes.