Aracılığıyla paylaş


(Transact-SQLILE FARKLI DEĞILDIR )

Şunlar için geçerlidir: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

İki ifadenin eşitliğini karşılaştırır ve bir veya iki işlenen null olsa bile doğru veya yanlış sonucu garanti eder.

IS [NOT] DISTINCT FROM, WHERE yan tümcelerinin ve HAVING yan tümcelerinin, FROM yan tümcelerinin birleştirme koşullarının ve Boole değerinin gerekli olduğu diğer yapıların arama koşulunda kullanılan bir koşuldur.

Transact-SQL söz dizimi kuralları

Syntax

expression IS [NOT] DISTINCT FROM expression

Arguments

expression

Herhangi bir geçerli ifade.

İfade bir sütun, sabit, işlev, değişken, skaler alt sorgu veya bir işleç veya işleç tarafından bağlanan sütun adları, sabitler ve işlevlerin herhangi bir bileşimi ya da alt sorgu olabilir.

Remarks

NULL değerini başka bir NULL değer de dahil olmak üzere başka bir değerle karşılaştırmak bilinmeyen bir sonuç verir. IS [NOT] DISTINCT FROM, null değerleri karşılaştırma işleci olarak kullanıldığında bilinen değerler olarak değerlendireceği için her zaman true veya false döndürür.

Aşağıdaki örnek tablo, IS [NOT] DISTINCT FROM davranışını göstermek için ve değerlerini AB kullanır:

A B A = B A, B'DEN AYRı DEĞIL
0 0 True True
0 1 False False
0 NULL Unknown False
NULL NULL Unknown True

IS [NOT] DISTINCT FROM içeren bir sorguyu bağlı sunuculara karşı yürütürken, bağlantılı sunucuya gönderilen sorgu metni, bağlı sunucunun söz dizimini ayrıştırma özelliğine sahip olup olmadığını belirleyip belirleyemeyeceğine bağlı olarak değişir.

Bağlı sunucunun AYRıŞTIRILABILDIĞINI belirlersek [NOT] DISTINCT FROM, as-issöz diziminin kodunu çözeriz. Bağlı sunucunun IS [NOT] DISTINCT FROM ayrıştırabileceğini belirleyemezsek, aşağıdaki ifadelerin kodunu çözeriz:

A IS DISTINCT FROM B kodunu şu şekilde çözer: ((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 kodunu şu şekilde çözer: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))

Examples

A. IS DISTINCT FROM komutunu kullanın

Aşağıdaki örnek, alanın 17 tamsayı değerinden farklı olduğu id satırları döndürür.

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

Sonuçlar, 17 değeriyle eşleşen tüm satırları id dışlar.

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

B. ŞUNDAN FARKLI DEĞİlDİ

Aşağıdaki örnek, alanın 17 tamsayı değerinden farklı olmadığı satırları id döndürür.

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

Sonuçlar yalnızca değerinin 17 ile eşleştiği id satırları döndürür.

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

C. NULL değere karşı IS DISTINCT FROM kullanın

Aşağıdaki örnek, alanın NULL'dan ayrı olduğu id satırları döndürür.

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

Sonuçlar yalnızca NULL olmayan satırları id döndürür.

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

D. NULL değere karşı IS NOT DISTINCT FROM kullanın

Aşağıdaki örnek, alanın NULL'tan farklı olmadığı satırları id döndürür.

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

Sonuçlar yalnızca NULL olan id satırları döndürür.

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

Ayrıca bakınız