SET ANSI_NULLS (Transact-SQL)

Null değerlerle kullanıldıklarında Eşittir (=) ve Eşit Değildir (<>) karşılaştırma işleçlerinin ISO uyumlu davranışını belirtir.

Önemli notÖnemli

SQL Server'ın gelecek bir sürümünde ANSI_NULLS her zaman ON olacak ve bu seçeneği açıkça OFF yapan tüm uygulamalar bir hata verecektir. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

SET ANSI_NULLS { ON | OFF }

Açıklamalar

SET ANSI_NULLS ON olduğunda, WHERE column_name = NULL kullanan bir SELECT deyimi, column_name sütununda hiçbir null değer olmasa bile sıfır satır döndürür. WHERE column_name <> NULL kullanan bir SELECT deyimi, column_name sütununda null olmayan değerler olsa bile sıfır satır döndürür.

SET ANSI_NULLS OFF olduğunda, Eşittir (=) ve Eşit Değildir (<>) karşılaştırma işleçleri ISO standardına uymaz. WHERE column_name = NULL kullanan bir SELECT deyimi, column_name sütununda null değerler olan satırları döndürür. WHERE column_name <> NULL kullanan bir SELECT deyimi, sütunda null olmayan değerler olan satırları döndürür. Ayrıca, WHERE column_name <> XYZ_value kullanan bir SELECT deyimi, XYZ_value olmayan ve NULL olmayan tüm satırları döndürür.

SET ANSI_NULLS ON olduğunda, null ile yapılan tüm karşılaştırmalar UNKNOWN sonucunu verir. SET ANSI_NULLS OFF olduğunda, null değerle yapılan tüm veri karşılaştırmaları, veri değerleri NULL ise TRUE sonucunu verir. SET ANSI_NULLS belirtilmezse, geçerli veritabanının ANSI_NULLS seçeneğinin ayarı uygulanır. ANSI_NULLS veritabanı seçeneği hakkında daha fazla bilgi için bkz. alter veritabanı (Transact-sql).

SET ANSI_NULLS ON, bir karşılaştırmayı yalnızca karşılaştırmanın işlenenlerinden biri NULL olan bir değişken veya NULL hazır değeriyse etkiler. Karşılaştırmanın iki tarafı da sütun veya bileşik ifadeyse, ayar karşılaştırmayı etkilemez.

Bir komut dosyasının ANSI_NULLS veritabanı seçeneğine veya SET ANSI_NULLS ayarlarına bakılmaksızın amaçlandığı gibi çalışması için, null değerler içerebilecek karşılaştırmalarda IS NULL ve IS NOT NULL kullanın.

Dağıtık sorguları çalıştırmak için SET ANSI_NULLS ON yapılmalıdır.

SET ANSI_NULLS ayrıca, hesaplanan sütunlarda veya dizinli görünümlerde dizin oluşturulur veya değiştirilirken de ON olmalıdır. SET ANSI_NULLS OFF ise, hesaplanan sütunlarında dizinleri olan tablolar veya dizinli görünümler üzerinde kullanılan tüm CREATE, UPDATE, INSERT ve DELETE deyimleri hata verir. SQL Server, gerekli değerleri ihlal eden tüm SET seçeneklerini listeleyen bir hata döndürür. Ayrıca bir SELECT deyimini çalıştırdığınızda, SET ANSI_NULLS OFF ise, SQL Server hesaplanan sütunlardaki veya görünümlerdeki dizin değerlerini göz ardı eder ve seçme işlemini tablo veya görünümlerde bu tür dizinler yokmuş gibi çözümler.

[!NOT]

ANSI_NULLS, hesaplanan sütunlardaki veya dizinli görünümlerdeki dizinlerle çalışırken gerekli değerlere ayarlanması gereken yedi SET seçeneğinden biridir. ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER ve CONCAT_NULL_YIELDS_NULL seçenekleri ON, NUMERIC_ROUNDABORT ise OFF olarak ayarlanmalıdır.

SQL Server Yerel İstemci ODBC sürücüsü ve SQL Server için SQL Server Yerel İstemci OLE DB Sağlayıcısı, bağlanırken ANSI_NULLS'ı otomatik olarak ON yapar. Bu ayar, SQL Server'ın bir örneğine bağlanmadan önce uygulamada ayarlanan ODBC veri kaynaklarında, ODBC bağlanma özniteliklerinde veya OLE DB bağlanma özelliklerinde yapılandırılabilir. SET ANSI_NULLS varsayılan değeri OFF'tur.

SET ANSI_DEFAULTS ON olduğunda, SET ANSI_NULLS etkinleştirilir.

ANSI_NULLS ayarı, ayrıştırma zamanında değil yürütme veya çalıştırma zamanında ayarlanır.

İzinler

public rolüne üye olmayı gerektirir.

Örnekler

Aşağıdaki örnek, bir tablodaki NULL ve null olmayan değerlerle karşılaştırmalar yapmak için Eşittir (=) ve Eşit Değildir (<>) karşılaştırma işleçlerini kullanmaktadır. Örnek ayrıca IS NULL işlevinin SET ANSI_NULLS ayarından etkilenmediğini de göstermektedir.

-- Create table t1 and insert values.
CREATE TABLE t1 (a INT NULL)
INSERT INTO t1 values (NULL)
INSERT INTO t1 values (0)
INSERT INTO t1 values (1)
GO

-- Print message and perform SELECT statements.
PRINT 'Testing default setting'
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- SET ANSI_NULLS to ON and test.
PRINT 'Testing ANSI_NULLS ON'
SET ANSI_NULLS ON
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- SET ANSI_NULLS to OFF and test.
PRINT 'Testing SET ANSI_NULLS OFF'
SET ANSI_NULLS OFF
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- Drop table t1.
DROP TABLE t1

-- Create table t1 and insert values.
CREATE TABLE t1 (a INT NULL)
INSERT INTO t1 values (NULL)
INSERT INTO t1 values (0)
INSERT INTO t1 values (1)
GO

-- Print message and perform SELECT statements.
PRINT 'Testing default setting'
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- SET ANSI_NULLS to ON and test.
PRINT 'Testing ANSI_NULLS ON'
SET ANSI_NULLS ON
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- SET ANSI_NULLS to OFF and test.
PRINT 'Testing SET ANSI_NULLS OFF'
SET ANSI_NULLS OFF
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT * 
FROM t1 
WHERE a = @varname
SELECT * 
FROM t1 
WHERE a <> @varname
SELECT * 
FROM t1 
WHERE a IS NULL
GO

-- Drop table t1.
DROP TABLE t1

Ayrıca bkz.

Başvuru

Deyimiyle (Transact-sql) bırak

SESSIONPROPERTY (Transact-sql)

= (Eşittir) (Transact-sql)

EĞER...BAŞKA (Transact-sql)

<>(Eşit değil) (Transact-sql)

Deyimiyle (Transact-sql) bırak

set ANSI_DEFAULTS (Transact-sql)

NEREDE (Transact-sql)

WHILE (Transact-SQL)