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 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric SQL
database in Microsoft Fabric
Két kifejezés egyenlőségét hasonlítja össze, és igaz vagy hamis eredményt garantál, még akkor is, ha az egyik vagy mindkét operandus NULL.
AZ IS [NOT] DISTINCT FROM a WHERE záradékok és HAVING záradékok keresési feltételében, a FROM záradékok illesztési feltételeiben és más olyan szerkezetekben használt predikátum, ahol logikai értékre van szükség.
Transact-SQL szintaxis konvenciók
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Bármilyen érvényes kifejezés.
A kifejezés lehet oszlop, állandó, függvény, változó, skaláris allekérdezés, vagy egy operátor vagy operátor által összekapcsolt oszlopnevek, állandók és függvények bármilyen kombinációja, vagy egy allekérdezés.
Remarks
Ha összehasonlít egy NULL értéket bármely más értékkel, beleértve egy másik NULL értéket is, ismeretlen eredményt fog kapni. AZ IS [NOT] DISTINCT FROM függvény mindig igaz vagy hamis értéket ad vissza, mivel a NULL értékeket ismert értékekként fogja kezelni, ha összehasonlító operátorként használják.
Az alábbi mintatábla az értékeket A használja, és B az IS [NOT] DISTINCT FROM viselkedését szemlélteti:
| A | B | A = B | AZ A NEM KÜLÖNBÖZIK A B-TŐL |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Ha olyan lekérdezést hajt végre, amely [NEM] KÜLÖNBÖZik a csatolt kiszolgálóktól, a csatolt kiszolgálónak küldött lekérdezés szövege eltérő lesz attól függően, hogy meg tudjuk-e állapítani, hogy a csatolt kiszolgáló képes-e elemezni a szintaxist.
Ha azt állapítjuk meg, hogy a csatolt kiszolgáló elemezni tudja az IS [NOT] DISTINCT FROM függvényt, akkor dekódoljuk a szintaxist as-is. Ha nem tudjuk megállapítani, hogy egy csatolt kiszolgáló nem tudja elemezni az IS [NOT] DISTINCT FROM függvényt, a következő kifejezésekre fogunk kódolni:
A IS DISTINCT FROM B dekódolja a következőre: ((A <> B OR A IS NULL OR B IS NULL) AND NOT (A IS NULL AND B IS NULL))
A IS NOT DISTINCT FROM B dekódolja a következőre: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. A használat ELTÉR A KÖVETKEZŐTŐL:
Az alábbi példa olyan sorokat ad vissza, amelyekben a id mező különbözik a 17 egész szám értékétől.
DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO
SELECT * FROM #SampleTempTable WHERE id IS DISTINCT FROM 17;
DROP TABLE IF EXISTS #SampleTempTable;
GO
Az eredmények kizárnak minden olyan sort, amely id megfelel a 17-nek.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. A használat NEM KÜLÖNBÖZIK A KÖVETKEZŐTŐL:
Az alábbi példa olyan sorokat ad vissza, amelyekben a id mező nem különbözik a 17 egész szám értékétől.
DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO
SELECT * FROM #SampleTempTable WHERE id IS NOT DISTINCT FROM 17;
DROP TABLE IF EXISTS #SampleTempTable;
GO
Az eredmények csak azokat a sorokat adnak vissza, ahol a id 17-nek megfelelő érték felel meg.
id message
----------- --------
17 abc
17 yes
C. AZ IS DISTINCT FROM használata NULL értékhez
Az alábbi példa olyan sorokat ad vissza, amelyekben a mező különbözik a id NULL értéktől.
DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO
SELECT * FROM #SampleTempTable WHERE id IS DISTINCT FROM NULL;
DROP TABLE IF EXISTS #SampleTempTable;
GO
Az eredmények csak azokat a sorokat adnak vissza, amelyekben nem id NULL érték volt.
id message
----------- --------
10 NULL
17 abc
17 yes
D. AZ IS NOT DISTINCT FROM használata NULL értékhez
Az alábbi példa olyan sorokat ad vissza, amelyekben a id mező nem különbözik a NULL értéktől.
DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO
SELECT * FROM #SampleTempTable WHERE id IS NOT DISTINCT FROM NULL;
DROP TABLE IF EXISTS #SampleTempTable;
GO
Az eredmények csak azokat a sorokat adnak vissza, ahol a id null érték volt.
id message
----------- --------
NULL hello
NULL NULL