Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
Az Egyenlő () és a Nem egyenlő (=<>) összehasonlító operátor ISO-kompatibilis viselkedését adja meg az SQL Server értékeinek NULL használatakor.
-
SET ANSI_NULLS ON- Kiértékeli mind{expression} = NULLa kettő értékét, mind{expression} <> NULLpedig az értékétFalse{expression}.NULLEz a viselkedés ANSI-kompatibilis. -
SET ANSI_NULLS OFF- Kiértékeli{expression} = NULL, mintTrueés{expression} <> NULLminthaFalseaz értéke{expression}.NULLEz a viselkedés nem ajánlott, mert azNULLértékeket nem szabad összehasonlítani a használatával=és<>az operátorokkal.
Megjegyzés:
SET ANSI_NULLS OFF és az ANSI_NULLS OFF adatbázis-beállítás elavult. Az SQL Server 2017-től kezdve (14.x) a ANSI_NULLS mindig BE értékre van állítva. Az elavult funkciókat nem szabad használni az új alkalmazásokban. További információ: Elavult adatbázismotor-funkciók az SQL Server 2017-ben.
Transact-SQL szintaxis konvenciók
Szemantika
Szintaxis az SQL Serverhez, kiszolgáló nélküli SQL-készlethez az Azure Synapse Analyticsben, Microsoft Fabric
SET ANSI_NULLS { ON | OFF }
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa
SET ANSI_NULLS ON
Megjegyzések
Ha ANSI_NULLS be van kapcsolva, a SELECT nulla sorokat használó WHERE column_name = NULL utasítás akkor is nulla sort ad vissza, ha a column_name NULL értékeket tartalmaz. Egy SELECT olyan utasítás, amely nulla sort ad WHERE column_name <> NULL vissza akkor is, ha a column_name nem NULL értékűek.
Ha ANSI_NULLS ki van kapcsolva, az Egyenlő (=) és a Nem egyenlő (<>) összehasonlító operátorok nem követik az ISO-szabványt. Egy SELECT olyan utasítás, amely WHERE column_name = NULL a sorokat adja vissza, amelyek null értékekkel rendelkeznek column_name. Egy SELECT olyan utasítás, amely az oszlopban nemWHERE column_name <> NULL értékeket tartalmazó sorokat ad NULL vissza. Emellett egy SELECT olyan utasítás, amely az WHERE column_name <> XYZ_value összes olyan sort visszaadja, amely nem XYZ_value , és amelyek nem NULL.
Ha ANSI_NULLS be van kapcsolva, a null értékhez viszonyított összes összehasonlítás ISMERETLEN értékre lesz kiértékelve. Ha SET ANSI_NULLS ki van kapcsolva, az összes adat null értékhez viszonyított összehasonlítása IGAZ értéket ad vissza, ha az adatérték .NULL Ha SET ANSI_NULLS nincs megadva, az aktuális adatbázis beállítását ANSI_NULLS kell alkalmazni. Az adatbázis beállításával kapcsolatos további információkért lásd: ANSI_NULLSALTER DATABASE (Transact-SQL).
Az alábbi táblázat bemutatja, hogy a beállítás ANSI_NULLS hogyan befolyásolja a logikai kifejezések eredményeit null és nem null értékekkel.
| Logikai kifejezés | BE ANSI_NULLS BEÁLLÍTÁSA | ANSI_NULLS KIKAPCSOLÁSA |
|---|---|---|
NULL = NULL |
ISMERETLEN | IGAZ |
1 = NULL |
ISMERETLEN | HAMIS |
NULL <> NULL |
ISMERETLEN | HAMIS |
1 <> NULL |
ISMERETLEN | IGAZ |
NULL > NULL |
ISMERETLEN | ISMERETLEN |
1 > NULL |
ISMERETLEN | ISMERETLEN |
NULL IS NULL |
IGAZ | IGAZ |
1 IS NULL |
HAMIS | HAMIS |
NULL IS NOT NULL |
HAMIS | HAMIS |
1 IS NOT NULL |
IGAZ | IGAZ |
SET ANSI_NULLS ON csak akkor befolyásolja az összehasonlítást, ha az összehasonlítás egyik operandusa egy változó, NULL vagy egy literál NULL. Ha az összehasonlítás mindkét oldala oszlop vagy összetett kifejezés, a beállítás nem befolyásolja az összehasonlítást.
Ahhoz, hogy egy szkript a kívánt módon működjön, függetlenül az ANSI_NULLS adatbázis beállításától vagy beállításától SET ANSI_NULLS, használja IS NULL és IS NOT NULL hasonlítsa össze azokat az összehasonlításokat, amelyek null értékeket tartalmazhatnak.
ANSI_NULLS az elosztott lekérdezések végrehajtásához on értékre kell állítani.
ANSI_NULLS akkor is be kell kapcsolnia, ha számított oszlopokon vagy indexelt nézeteken hoz létre vagy módosít indexeket. Ha a SET ANSI_NULLS ki van kapcsolva, a számított oszlopokon vagy CREATE indexelt nézeteken lévő indexekkel rendelkező táblák bármelyikeUPDATEINSERTDELETE, illetve utasítása meghiúsul. Az SQL Server hibát ad vissza, amely felsorolja az összes olyan SET-beállítást, amely megsérti a szükséges értékeket. Ha ki van kapcsolva egy SELECT utasítás SET ANSI_NULLS végrehajtásakor, az SQL Server figyelmen kívül hagyja a számított oszlopok vagy nézetek indexértékeit, és úgy oldja fel a kiválasztási műveletet, mintha nem lennének ilyen indexek a táblákon vagy nézeteken.
Megjegyzés:
ANSI_NULLS egyike annak a hét SET beállításnak, amelyet kötelező értékekre kell állítani a számított oszlopok vagy indexelt nézetek indexeinek kezelésekor. A beállításokat ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIERés CONCAT_NULL_YIELDS_NULL be is kell állítani, és NUMERIC_ROUNDABORT ki kell állítani.
Az SQL Server natív ügyfél ODBC-illesztőprogramja és az SQL Server natív ügyféloldali OLE DB-szolgáltatója az SQL Serverhez csatlakozáskor automatikusan BE értékre van állítva ANSI_NULLS . Ez a beállítás konfigurálható ODBC-adatforrásokban, ODBC-kapcsolatattribútumokban vagy az alkalmazásban beállított OLE DB kapcsolati tulajdonságokban, mielőtt az SQL Server-példányhoz csatlakozna. Az alapértelmezett érték ki SET ANSI_NULLS van kapcsolva.
Ha ANSI_DEFAULTS be van kapcsolva, ANSI_NULLS engedélyezve van.
A beállítás ANSI_NULLS végrehajtáskor vagy futtatáskor van definiálva, és nem elemzési időpontban.
A beállítás aktuális beállításának megtekintéséhez futtassa a következő lekérdezést:
DECLARE @ANSI_NULLS VARCHAR(3) = 'OFF';
IF ( (32 & @@OPTIONS) = 32 ) SET @ANSI_NULLS = 'ON';
SELECT @ANSI_NULLS AS ANSI_NULLS;
Engedélyek
A nyilvános szerepkör tagságát igényli.
Példák
Az alábbi példa az Egyenlőség (=) és a Not Equal To (<>) összehasonlító operátort használja egy változó értékével vagy NULL értékével 0null való összehasonlításhoz.
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
Az eredmények az alábbi táblázatban jelennek meg.
| Egyenlő null | KülönbözőNull | Egyenlő nulla | KülönbözőZero |
|---|---|---|---|
| Igaz | Téves | Téves | Igaz |
Az SET ANSI_NULLS ON összes kifejezés "Hamis" értékként lesz kiértékelve, mert NULL ezek az NULL operátorok nem hasonlíthatók össze és 0 nem használhatók.
Az alábbi példa az Egyenlőség (=) és a Not Equal To (<>) összehasonlító operátorokat használja a táblákban lévő és nem null értékekkel NULL való összehasonlításhoz. A példa azt is mutatja, hogy a SET ANSI_NULLS beállítás nincs hatással a beállításra 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
Most állítsa be a ANSI_NULLS ON értékre, és tesztelje.
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
Most állítsa a ANSI_NULLS KI értékre, és tesztelje.
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;