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 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Vergelijkt de gelijkheid van twee expressies en garandeert een waar of onwaar resultaat, zelfs als een of beide operanden NULL zijn.
IS [NOT] DISTINCT FROM is een predicaat dat wordt gebruikt in de zoekvoorwaarde van WHERE-componenten en HAVING-componenten , de joinvoorwaarden van FROM-componenten en andere constructies waarbij een Booleaanse waarde is vereist.
Transact-SQL syntaxis-conventies
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Elke geldige expressie.
De expressie kan een kolom, een constante, een functie, een variabele, een scalaire subquery of een combinatie van kolomnamen, constanten en functies zijn die zijn verbonden door een operator of operator of een subquery.
Remarks
Als u een NULL-waarde vergelijkt met een andere waarde, inclusief een andere NULL, krijgt u een onbekend resultaat. IS [NIET] DISTINCT FROM retourneert altijd waar of onwaar, omdat null-waarden worden behandeld als bekende waarden wanneer deze worden gebruikt als vergelijkingsoperator.
In de volgende voorbeeldtabel worden waarden A gebruikt en B wordt het gedrag van IS [NIET] DISTINCT FROM geïllustreerd:
| A | B | A = B | A IS NIET ANDERS DAN B |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Wanneer u een query uitvoert die IS [NOT] DISTINCT FROM bevat op gekoppelde servers, varieert de querytekst die naar de gekoppelde server wordt verzonden, afhankelijk van of we kunnen bepalen of de gekoppelde server de mogelijkheid heeft om de syntaxis te parseren.
Als we bepalen dat de gekoppelde server IS [NOT] DISTINCT FROM kan parseren, wordt de syntaxis as-isgedecodeerd. Als we niet kunnen vaststellen dat een gekoppelde server IS [NIET] DISTINCT FROM kan parseren, worden de volgende expressies gedecodeerd:
A IS DISTINCT FROM B wordt gedecodeerd naar: ((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 wordt gedecodeerd naar: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. IS DISTINCT FROM gebruiken
In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld verschilt van de gehele waarde van 17.
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
De resultaten sluiten alle rijen uit waarbij id de waarde van 17 overeenkomt.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. Gebruik IS NIET UNIEK VAN
In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld niet verschilt van de gehele waarde van 17.
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
De resultaten retourneren alleen de rijen waar de id overeenkomende waarde van 17 is.
id message
----------- --------
17 abc
17 yes
C. IS DISTINCT FROM gebruiken op basis van een NULL-waarde
In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld verschilt van NULL.
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
De resultaten retourneren alleen de rijen waarin het id niet NULL was.
id message
----------- --------
10 NULL
17 abc
17 yes
D. IS NOT DISTINCT FROM gebruiken op basis van een NULL-waarde
In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld niet verschilt van NULL.
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
De resultaten retourneren alleen de rijen waarin null id was.
id message
----------- --------
NULL hello
NULL NULL