SET ANSI_NULLS (Transact-SQL)
Określa zachowanie zgodne z ISO równa (=) i nie równą)<>) wartości null operatory porównania, gdy są one używane przez.
Important Note: |
---|
W przyszłych wersjach SQL ServerANSI_NULLS zawsze będzie ON i aplikacji, to jawnie zestaw opcję OFF spowoduje wystąpienie błędu. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja. |
SET ANSI_NULLS { ON | OFF }
Remarks
Gdy zestaw ANSI_NULLS, jest ON, który używa WHERE instrukcja SELECT column_name = NULL Zwraca zero wiersze, nawet jeśli nie ma wartości null w column_name. A SELECT statement that uses WHERE column_name <> NULL returns zero rows even if there are nonnull values in column_name.
Gdy zestaw ANSI_NULLS jest wyłączona, równa (=) i nie równą (<>) operatory porównania nie są zgodne z normą ISO. Instrukcja SELECT, który używa WHERE column_name = NULL Zwraca wiersze, które mają wartości null w column_name. A SELECT statement that uses WHERE column_name <> NULL returns the rows that have nonnull values in the column.Also, a SELECT statement that uses WHERE column_name <> XYZ_value returns all rows that are not XYZ_value and that are not NULL.
zestaw ANSI_NULLS jest włączone, wszystkie porównania przed wartością null być nieokreślona.Gdy zestaw ANSI_NULLS jest wyłączona, porównania wszystkich danych, w stosunku do wartości null oszacowane na wartość TRUE, jeśli wartość danych jest NULL.Jeżeli nie określono zestaw ANSI_NULLS, stosuje się opcji ANSI_NULLS bieżącej bazy danych.Aby uzyskać więcej informacji o opcji bazy danych ANSI_NULLS zobacz ALTER DATABASE języka Transact-SQL) i Setting Database Options.
zestaw ANSI_NULLS ON wpływa na porównanie tylko wtedy, gdy jeden z argumentów porównania jest zmienna, która ma wartość NULL lub wartość literału NULL.W przypadku obu stron porównania kolumny lub wyrażenia złożone, ustawienie nie ma wpływu na porównanie.
Dla skryptu działała prawidłowo niezależnie od ANSI_NULLS bazy danych opcji lub ustawienia ANSI_NULLS, zestaw, należy użyć IS NULL i IS NOT NULL w porównań, które mogą zawierać wartości null.
zestaw ANSI_NULLS, należy ustawić na ON wykonywania kwerend rozproszonych.
zestaw ANSI_NULLS musi być ON podczas tworzenia lub zmieniania indeksów dla kolumny obliczanej lub widoków indeksowanych.If SET ANSI_NULLS is OFF, any CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail.SQL Server will return an error that lists all SET options that violate the required values.Ponadto podczas wykonywania instrukcja SELECT, jeśli zestaw ANSI_NULLS jest wyłączona, SQL Server będzie ignorują wartości indeksu kolumny obliczane lub widoki i rozwiązać wybierz operację, tak jakby te indeksy w tabelach lub widokach.
Uwaga
ANSI_NULLS, jest jednym z siedmiu opcji zestaw, które musi być ustawiona na wartości podczas zajmowania się indeksów dla obliczane kolumny lub indeksowania widoków.Opcje ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER i CONCAT_NULL_YIELDS_NULL musi być również zestaw on, i musi być NUMERIC_ROUNDABORT zestaw na OFF.
The SQL Server Native klient ODBC driver and SQL Server Native klient OLE DB dostawca for SQL Server automatically zestaw ANSI_NULLS to ON when connecting. Ustawienie to można tak skonfigurować źródła danych ODBC, atrybuty połączenia ODBC lub OLE DB właściwości połączenia, które są ustawione w aplikacji przed połączeniem się z wystąpienie SQL Server. Domyślną wartością dla zestaw ANSI_NULLS jest wyłączona.
zestaw ANSI_DEFAULTS jest włączone, ma włączoną zestaw ANSI_NULLS.
Ustawienia zestaw ANSI_NULLS jest ustawiony na wykonać lub uruchomić czas, a nie w czasie analizowania.
Uprawnienia
Wymaga członkostwo w roli publicznej.
Przykłady
W poniższym przykładzie użyto (równe=) i nie są równe na ()<>) 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 ustawienie.
-- 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