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å 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.