Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2022 (16.x)
Azure SQL Database
AzureSQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL 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.
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é
- Predikáty
- OBSAHUJE (Transact-SQL)
- VOLNÝ TEXT (Transact-SQL)
- NENÍ [NE] NULOVÁ (Transact-SQL)