Sdílet prostřednictvím


NENÍ ODLIŠNÝ OD (Transact-SQL)

Platí na: SQL Server 2022 (16.x) Azure SQL Database AzureSQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Porovná rovnost dvou výrazů a zaručuje pravdivý nebo nepravdivý výsledek, i když jeden nebo oba operandy mají hodnotu NULL.

IS [NOT] DISTINCT FROM je predikát použitý ve hledaném stavu klauzulí WHERE a klauzulí HAVING , podmínek spojení klauzulí FROM a dalších konstruktorů, kde je vyžadována logická hodnota.

Transact-SQL konvence syntaxe

Syntax

expression IS [NOT] DISTINCT FROM expression

Arguments

expression

Libovolný platný výraz.

Výrazem může být sloupec, konstanta, funkce, proměnná, skalární poddotaz nebo libovolná kombinace názvů sloupců, konstant a funkcí spojených operátorem nebo operátory nebo poddotazem.

Remarks

Porovnání hodnoty NULL s jakoukoli jinou hodnotou, včetně jiné hodnoty NULL, bude mít neznámý výsledek. FUNKCE IS [NOT] DISTINCT FROM vždy vrátí hodnotu true nebo false, protože bude považovat hodnoty NULL za známé hodnoty při použití jako relační operátor.

Následující ukázková tabulka používá hodnoty A a B ilustruje chování funkce IS [NOT] DISTINCT FROM:

A B A = B A NENÍ ODLIŠNÉ OD B
0 0 True True
0 1 False False
0 NULL Unknown False
NULL NULL Unknown True

Při provádění dotazu obsahujícího funkci IS [NOT] DISTINCT FROM na odkazovaných serverech se text dotazu odesílaný na odkazovaný server bude lišit podle toho, jestli můžeme zjistit, že propojený server má schopnost analyzovat syntaxi.

Pokud zjistíme, že propojený server může analyzovat HODNOTU [NOT] DISTINCT FROM, dekódujeme syntaxi as-is. Pokud nemůžeme zjistit, že propojený server může analyzovat hodnotu IS [NOT] DISTINCT FROM, dekódujeme následující výrazy:

A IS DISTINCT FROM B dekóduje na: ((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óduje na: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))

Examples

A. POUŽITÍ JE ODLIŠNÉ OD

Následující příklad vrátí řádky, ve kterých id se pole liší od celočíselné hodnoty 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

Výsledky vyloučí všechny řádky, ve kterých id odpovídá hodnotě 17.

id          message
----------- ---------
NULL        hello
10          NULL
NULL        NULL

B. POUŽITÍ NENÍ ODLIŠNÉ OD

Následující příklad vrátí řádky, ve kterých id se pole liší od celočíselné hodnoty 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

Výsledky vrátí pouze řádky, ve kterých id odpovídá hodnotě 17.

id          message
----------- --------
17          abc
17          yes

C. Použití funkce IS DISTINCT FROM proti hodnotě NULL

Následující příklad vrátí řádky, ve kterých id se pole liší od hodnoty 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

Výsledky vrátí pouze řádky, ve id kterých hodnota null nebyla.

id          message
----------- --------
10          NULL
17          abc
17          yes

D. Použití FUNKCE IS NOT DISTINCT FROM proti hodnotě NULL

Následující příklad vrátí řádky, ve kterých id se pole liší od hodnoty 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

Výsledky vrátí pouze řádky, ve id kterých byla hodnota NULL.

id          message
----------- --------
NULL        hello
NULL        NULL

Viz také