Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: 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
Porównuje równość dwóch wyrażeń i gwarantuje wynik true lub false, nawet jeśli jeden lub oba operandy mają wartość NULL.
IS [NOT] DISTINCT FROM to predykat używany w warunku wyszukiwania klauzul WHERE i klauzul HAVING , warunki sprzężenia klauzul FROM i inne konstrukcje, w których wymagana jest wartość logiczna.
Transact-SQL konwencje składni
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Dowolne prawidłowe wyrażenie.
Wyrażenie może być kolumną, stałą, funkcją, zmienną, podzapytaniem skalarnym lub dowolną kombinacją nazw kolumn, stałych i funkcji połączonych przez operatory lub podzapytania.
Remarks
Porównanie wartości NULL z dowolną inną wartością, w tym inną wartością NULL, będzie miało nieznany wynik. IS [NOT] DISTINCT FROM zawsze zwraca wartość true lub false, ponieważ będzie traktować wartości NULL jako znane wartości, gdy są używane jako operator porównania.
W poniższej przykładowej tabeli użyto wartości A i B zilustrowano zachowanie funkcji IS [NOT] DISTINCT FROM:
| A | B | A = B | A NIE RÓŻNI SIĘ OD B |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Podczas wykonywania zapytania zawierającego element IS [NOT] DISTINCT FROM względem serwerów połączonych tekst zapytania wysyłany do serwera połączonego będzie się różnić w zależności od tego, czy serwer połączony ma możliwość analizowania składni.
Jeśli ustalimy, że połączony serwer może przeanalizować wartość IS [NOT] DISTINCT FROM, zdekodujemy składnię as-is. Jeśli nie możemy określić, że połączony serwer może przeanalizować is [NOT] DISTINCT FROM, zdekodujemy do następujących wyrażeń:
A IS DISTINCT FROM B spowoduje dekodowanie do: ((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 spowoduje dekodowanie do: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. Używanie funkcji IS DISTINCT FROM
Poniższy przykład zwraca wiersze, w których id pole różni się od wartości całkowitej 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
Wyniki wykluczają wszystkie wiersze, w których id dopasowano wartość 17.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. Użycie NIE JEST ODRĘBNE OD
Poniższy przykład zwraca wiersze, w których id pole nie różni się od wartości całkowitej 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
Wyniki zwracają tylko wiersze, w których id dopasowano wartość 17.
id message
----------- --------
17 abc
17 yes
C. Użyj funkcji IS DISTINCT FROM względem wartości NULL
Poniższy przykład zwraca wiersze, w których id pole różni się od wartości 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
Wyniki zwracają tylko wiersze, w których id wartość nie była równa NULL.
id message
----------- --------
10 NULL
17 abc
17 yes
D. Użyj funkcji IS NOT DISTINCT FROM względem wartości NULL
Poniższy przykład zwraca wiersze, w których id pole nie różni się od wartości 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
Wyniki zwracają tylko wiersze, w których id wartość miała wartość NULL.
id message
----------- --------
NULL hello
NULL NULL