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} = NULLals{expression} <> NULLFalsealsof de waarde{expression}isNULL. Dit gedrag is compatibel met ANSI. -
SET ANSI_NULLS OFF- Evalueert{expression} = NULLalsTrueen{expression} <> NULLalsofFalsede waarde{expression}isNULL. Dit gedrag wordt niet aanbevolen, omdat deNULLwaarden 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 NULLzijn.
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 NULLis. 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 CREATEmeer UPDATE, INSERTen 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, , ARITHABORTen QUOTED_IDENTIFIERCONCAT_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 NULL0 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;