USTAWIENIA ANSI_NULLS (Transact-SQL)
Określa zachowanie zgodne z ISO równości (=) i nie równa się (<>) operatory porównania, gdy używane są wartości null .
Ważne: |
---|
W przyszłej wersja programu SQL Server, klauzule ANSI_NULLS zawsze będzie ON i wszystkie aplikacje, aby jawnie zestaw opcję OFF wygeneruje błąd.Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja. |
Składnia
SET ANSI_NULLS { ON | OFF }
Uwagi
Gdy ustawienia ANSI_NULLS jest ON SELECT instrukcja , która korzysta z miejsca column_name = NULL zwraca zero wiersze, nawet jeśli mają wartości null w column_name.SELECT instrukcja , która korzysta z miejsca column_name <> NULL zwraca zero wiersze, nawet jeśli funkcja niepustych wartości w column_name.
Gdy ustawienia ANSI_NULLS jest wyłączenie równości (=) i nie równa się (<>) operatory porównania nie są zgodne z normą ISO.SELECT instrukcja , która korzysta z miejsca column_name = NULL zwracająca wiersze, które mają wartości null w column_name.SELECT instrukcja , która korzysta z miejsca column_name <> NULL zwracająca wiersze, które mają niepustych wartości w kolumna.Także SELECT instrukcja , która używa gdzie column_name <> XYZ_value zwraca wszystkie wiersze, które nie są XYZ_value i które są wartości NULL.
USTAWIENIA ANSI_NULLS jest włączone, wszystkie porównania przeciwko wartość null być nieznane.Gdy ustawienia ANSI_NULLS jest wyłączona, porównania wszystkie dane przed wartość null oceny TRUE jeśli wartość danych jest NULL.Jeżeli nie określono ustawienia ANSI_NULLS, stosuje się ustawienie opcji ANSI_NULLS w bieżącej bazie danych.Aby uzyskać więcej informacji o opcji bazy danych klauzule ANSI_NULLS, zobacz ALTER DATABASE (Transact-SQL) i Ustawianie opcji bazy danych.
Ustaw na ANSI_NULLS dotyczy porównanie tylko wtedy, gdy jest jeden z argumentów porównanie zmiennej, która jest wartość NULL lub zero literału.Jeśli obie strony porównania kolumny lub wyrażenia złożone, ustawienie nie wpływa na porównanie.
Dla skryptu do pracy zgodnie z przeznaczeniem, niezależnie od opcji ANSI_NULLS bazy danych lub ustawienie ustawienia ANSI_NULLS, użyj IS NULL i IS NOT NULL w porównaniach, które mogą zawierać wartości null .
USTAWIENIA ANSI_NULLS powinno być zestaw na wykonywanie kwerend rozproszonych.
USTAWIENIA ANSI_NULLS musi być ON podczas tworzenia lub zmieniania indeksów dla kolumny obliczanej lub widoki indeksowane.Jeśli ustawienia ANSI_NULLS jest wyłączona, tworzenie, UPDATE, INSERT i DELETE instrukcje na tabelach z indeksów dla kolumny obliczanej lub widoki indeksowane nie powiedzie się.SQL ServerZwraca błąd, który zawiera listę wszystkich ustaw opcje, które naruszają wymagane wartości.Również, gdy wykonać wybierz instrukcja, jeśli ustawienia ANSI_NULLS jest wyłączona, SQL Server zignoruje wartości indeksu kolumny obliczane lub widoki i wybierz operacji rozpoznawania, jak gdyby żadnych indeksów w tabelach lub widokach.
Ostrzeżenie
Klauzule ANSI_NULLS, jest jednym z siedmiu Ustaw opcje, które muszą być zestaw wartości wymagane podczas zajmowania się indeksy na obliczane kolumny lub widoki indeksowane.Opcje spowodowałyby, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER i CONCAT_NULL_YIELDS_NULL również musi być zestaw na, i NUMERIC_ROUNDABORT musi być zestaw na wyłączone.
SQL Server Sterownika ODBC macierzystym klienta i SQL Server macierzystego klienta OLE DB Provider for SQL Server automatycznie zestaw ANSI_NULLS on podczas łączenia.To ustawienie można skonfigurować źródła danych ODBC, atrybuty połączenia ODBC lub OLE DB właściwości połączenia, które są zestaw w aplikacji przed połączeniem się z wystąpienie SQL Server.Domyślne ustawienia ANSI_NULLS jest wyłączona.
Gdy ustawienie ANSI_DEFAULTS jest włączone, ustawienie ANSI_NULLS jest włączona.
Ustawienia ANSI_NULLS USTAWIONY jest zestaw na wykonać lub czas jednostkowy i nie analizować czas.
Uprawnienia
Wymaga członkostwa w public rolę.
Przykłady
W poniższym przykładzie użyto równa (=), a nie równe (<>) operatory porównania dokonywanie porównań z NULL i niepustych wartości w tabela.W przykładzie pokazano również, IS NULL nie dotyczy SET ANSI_NULLS Ustawienia.
-- 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