Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Hiermee geeft u iso-compatibel gedrag van de vergelijkingsoperators Equals (=
) en Not Equal To (<>
) op wanneer ze worden gebruikt met NULL
waarden in SQL Server.
-
SET ANSI_NULLS ON
- Evalueert zowel{expression} = NULL
als{expression} <> NULL
False
alsof de waarde{expression}
isNULL
. Dit gedrag is compatibel met ANSI. -
SET ANSI_NULLS OFF
- Evalueert{expression} = NULL
alsTrue
en{expression} <> NULL
alsofFalse
de waarde{expression}
isNULL
. Dit gedrag wordt niet aanbevolen, omdat deNULL
waarden niet moeten worden vergeleken met behulp van=
en<>
operators.
Opmerking
SET ANSI_NULLS OFF
en de ANSI_NULLS OFF
databaseoptie is afgeschaft. Vanaf SQL Server 2017 (14.x) is ANSI_NULLS altijd ingesteld op AAN. Afgeschafte functies mogen niet worden gebruikt in nieuwe toepassingen. Zie Afgeschafte database-enginefuncties in SQL Server 2017 voor meer informatie.
Transact-SQL syntaxis-conventies
Syntaxis
Syntaxis voor SQL Server, serverloze SQL-pool in Azure Synapse Analytics, Microsoft Fabric
SET ANSI_NULLS { ON | OFF }
Syntaxis voor Azure Synapse Analytics en Analytics Platform System (PDW)
SET ANSI_NULLS ON
Opmerkingen
Wanneer ANSI_NULLS
is INGESCHAKELD, retourneert een SELECT
instructie die WHERE column_name = NULL
nul rijen retourneert, zelfs als er NULL-waarden in column_name zijn. Een SELECT
instructie die gebruikmaakt WHERE column_name <> NULL
van retourneert nul rijen, zelfs als er niet-NULL-waarden zijn in column_name.
Wanneer ANSI_NULLS UIT is, voldoen de vergelijkingsoperatoren Gelijk aan (=
) en Niet gelijk aan (<>
) niet aan de ISO-norm. Een SELECT
instructie die gebruikmaakt WHERE column_name = NULL
, retourneert de rijen met null-waarden in column_name. Een SELECT
instructie die gebruikmaakt WHERE column_name <> NULL
, retourneert de rijen met niet-waardenNULL
in de kolom. Ook retourneert een SELECT
instructie die alle WHERE column_name <> XYZ_value
rijen retourneert die niet XYZ_value zijn en die niet NULL
zijn.
Wanneer ANSI_NULLS
is INGESCHAKELD, worden alle vergelijkingen met een null-waarde geëvalueerd als ONBEKEND. Wanneer SET ANSI_NULLS
is UIT, worden alle gegevens vergeleken met een null-waarde als WAAR als de gegevenswaarde is NULL
. Als SET ANSI_NULLS
dit niet is opgegeven, is de instelling van de optie van de ANSI_NULLS
huidige database van toepassing. Zie ANSI_NULLS
voor meer informatie over de databaseoptie.
In de volgende tabel ziet u hoe de instelling ANSI_NULLS
van invloed is op de resultaten van Boole-expressies met behulp van null- en niet-null-waarden.
Booleaanse expressie | ANSI_NULLS INSTELLEN AAN | ANSI_NULLS UITZETTEN |
---|---|---|
NULL = NULL |
ONBEKEND | WAAR |
1 = NULL |
ONBEKEND | ONWAAR |
NULL <> NULL |
ONBEKEND | ONWAAR |
1 <> NULL |
ONBEKEND | WAAR |
NULL > NULL |
ONBEKEND | ONBEKEND |
1 > NULL |
ONBEKEND | ONBEKEND |
NULL IS NULL |
WAAR | WAAR |
1 IS NULL |
ONWAAR | ONWAAR |
NULL IS NOT NULL |
ONWAAR | ONWAAR |
1 IS NOT NULL |
WAAR | WAAR |
SET ANSI_NULLS ON
is slechts van invloed op een vergelijking als een van de operanden van de vergelijking een variabele is die of NULL
een letterlijke variabele NULL
is. Als beide zijden van de vergelijking kolommen of samengestelde expressies zijn, heeft de instelling geen invloed op de vergelijking.
Een script werkt naar behoren, ongeacht de ANSI_NULLS
databaseoptie of de instelling van SET ANSI_NULLS
, gebruik IS NULL
en IS NOT NULL
in vergelijkingen die null-waarden kunnen bevatten.
ANSI_NULLS
moet worden ingesteld op AAN voor het uitvoeren van gedistribueerde query's.
ANSI_NULLS
moet ook AAN zijn wanneer u indexen maakt of wijzigt voor berekende kolommen of geïndexeerde weergaven. Als SET-ANSI_NULLS UIT is, een of CREATE
meer UPDATE
, INSERT
en DELETE
instructies voor tabellen met indexen voor berekende kolommen of geïndexeerde weergaven mislukken. SQL Server retourneert een fout met alle SET-opties die de vereiste waarden schenden. Wanneer u een SELECT
instructie uitvoert, worden SET ANSI_NULLS
de indexwaarden in berekende kolommen of weergaven door SQL Server genegeerd en wordt de selectiebewerking omgezet alsof er geen dergelijke indexen in de tabellen of weergaven zijn.
Opmerking
ANSI_NULLS
is een van de zeven SET-opties die moeten worden ingesteld op vereiste waarden bij het verwerken van indexen in berekende kolommen of geïndexeerde weergaven. De optiesANSI_PADDING
, ANSI_WARNINGS
, , ARITHABORT
en QUOTED_IDENTIFIER
CONCAT_NULL_YIELDS_NULL
moeten ook worden ingesteld op AAN en NUMERIC_ROUNDABORT
moeten worden ingesteld op UIT.
Het ODBC-stuurprogramma van sql Server Native Client en de OLE DB-provider van SQL Server voor SQL Server worden automatisch ingesteld ANSI_NULLS
op AAN wanneer er verbinding wordt gemaakt. Deze instelling kan worden geconfigureerd in ODBC-gegevensbronnen, in ODBC-verbindingskenmerken of in OLE DB-verbindingseigenschappen die zijn ingesteld in de toepassing voordat u verbinding maakt met een exemplaar van SQL Server. De standaardwaarde SET ANSI_NULLS
is UIT.
Wanneer ANSI_DEFAULTS
is INGESCHAKELD, ANSI_NULLS
is ingeschakeld.
De instelling ANSI_NULLS
wordt gedefinieerd tijdens het uitvoeren of uitvoeren en niet op parseringstijd.
Voer de volgende query uit om de huidige instelling voor deze instelling weer te geven:
DECLARE @ANSI_NULLS VARCHAR(3) = 'OFF';
IF ( (32 & @@OPTIONS) = 32 ) SET @ANSI_NULLS = 'ON';
SELECT @ANSI_NULLS AS ANSI_NULLS;
Machtigingen
Vereist lidmaatschap van de openbare rol.
Voorbeelden
In het volgende voorbeeld worden de vergelijkingsoperatoren Equals (=
) en Not Equal To (<>
) gebruikt om vergelijkingen te maken met NULL
of 0
en de null
waarde in een variabele.
SET ANSI_NULLS OFF
DECLARE @var INT = NULL
SELECT
IIF(@var = NULL, 'True', 'False') as EqualNull,
IIF(@var <> NULL, 'True', 'False') as DifferentNull,
IIF(@var = 0, 'True', 'False') as EqualZero,
IIF(@var <> 0, 'True', 'False') as DifferentZero
De resultaten worden weergegeven in de volgende tabel.
EqualNull | DifferentNull | Gelijk Nul | DifferentZero |
---|---|---|---|
Klopt | Onwaar | Onwaar | Klopt |
Alle SET ANSI_NULLS ON
expressies worden geëvalueerd als Onwaar, omdat NULL
deze operatoren niet kunnen worden vergeleken of NULL
0
gebruikt.
In het volgende voorbeeld worden de vergelijkingsoperatoren Equals (=
) en Not Equal To (<>
) gebruikt om vergelijkingen te maken met NULL
en niet-null-waarden in een tabel. In het voorbeeld ziet u ook dat de SET ANSI_NULLS
instelling niet van invloed is IS NULL
.
-- Create table t1 and insert values.
CREATE TABLE dbo.t1 (a INT NULL);
INSERT INTO dbo.t1 values (NULL),(0),(1);
GO
-- Print message and perform SELECT statements.
PRINT 'Testing default setting';
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
Stel nu ANSI_NULLS in op AAN en test.
PRINT 'Testing ANSI_NULLS ON';
SET ANSI_NULLS ON;
GO
DECLARE @varname int;
SET @varname = NULL
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
Stel nu ANSI_NULLS in op UIT en test.
PRINT 'Testing ANSI_NULLS OFF';
SET ANSI_NULLS OFF;
GO
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
-- Drop table t1.
DROP TABLE dbo.t1;