Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

SET ANSI_NULLS (Transact-SQL)

Specifica il comportamento conforme all'ISO degli operatori di confronto Uguale a (=) e Diverso da (<>) quando vengono utilizzati con valori Null in SQL Server 2014.

Nota importante Importante

In una versione futura di SQL Server ANSI_NULLS sarà sempre impostata su ON e qualsiasi applicazione che imposta tale opzione in modo esplicito su OFF genererà un errore. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Si applica a: SQL Server (da SQL Server 2008 a versione corrente).

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

SET ANSI_NULLS { ON | OFF }

Quando l'opzione SET ANSI_NULLS è impostata su ON, un'istruzione SELECT che utilizza WHERE column_name = NULL non restituisce alcuna riga anche se column_name include valori Null. Un'istruzione SELECT che utilizza WHERE column_name <> NULL non restituisce alcuna riga anche se column_name include valori non Null.

Quando l'opzione SET ANSI_NULLS è impostata su OFF, gli operatori uguale a (=) e diverso da (<>) non seguono lo standard ISO. Un'istruzione SELECT che utilizza WHERE column_name = NULL restituisce le righe con valori Null in column_name. Un'istruzione SELECT che utilizza WHERE column_name <>NULL restituisce le righe con valori non Null nella colonna. Un'istruzione SELECT che utilizza WHERE column_name <> XYZ_value restituisce infine tutte le righe con valore diverso da XYZ_value e da NULL.

Quando l'opzione SET ANSI_NULLS è impostata su ON, tutti i confronti con un valore Null restituiscono UNKNOWN. Quando l'opzione SET ANSI_NULLS è impostata su OFF, i confronti di tutti i dati con un valore Null restituiscono TRUE se il valore dei dati è NULL. In caso di omissione di SET ANSI_NULLS, viene applicata l'impostazione dell'opzione ANSI_NULLS del database corrente. Per ulteriori informazioni sull'opzione di database ANSI_NULLS, vedere ALTER DATABASE (Transact-SQL).

SET ANSI_NULLS ON influisce su un confronto solo se uno degli operandi del confronto è una variabile NULL o un valore letterale NULL. Se entrambi gli operandi del confronto sono colonne o espressioni composte, l'impostazione non ha effetto sul confronto.

Affinché uno script presenti il funzionamento previsto indipendentemente dall'opzione di database ANSI_NULLS o dall'impostazione di SET ANSI_NULLS, utilizzare IS NULL e IS NOT NULL nei confronti che potrebbero includere valori Null.

Per l'esecuzione di query distribuite, è consigliabile impostare l'opzione SET ANSI_NULLS su ON.

È inoltre necessario che l'opzione SET ANSI_NULLS sia impostata su ON durante la creazione o la modifica di indici su colonne calcolate o viste indicizzate. Se l'opzione SET ANSI_NULLS è impostata su OFF, qualsiasi istruzione CREATE, UPDATE, INSERT e DELETE eseguita in tabelle con indici su colonne calcolate o viste indicizzate avrà esito negativo. SQL Server restituirà un errore in cui sono elencate tutte le opzioni SET che violano i valori obbligatori. Se inoltre l'opzione SET ANSI_NULLS è impostata su OFF durante l'esecuzione di un'istruzione SELECT, i valori di indice delle colonne calcolate o delle viste verranno ignorati da SQL Server e l'operazione di selezione verrà risolta come se le tabelle o le viste non includessero tali indici.

Nota Nota

ANSI_NULLS è una delle sette opzioni SET che è necessario impostare sui valori richiesti quando si utilizzano colonne calcolate o viste indicizzate. È inoltre necessario impostare su ON le opzioni ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER e CONCAT_NULL_YIELDS_NULL, mentre l'opzione NUMERIC_ROUNDABORT deve essere impostata su OFF.

Il driver ODBC di SQL Server Native Client e il provider OLE DB SQL Server Native Client per SQL Server impostano automaticamente l'opzione ANSI_DEFAULTS su ON al momento della connessione. È possibile configurare questa impostazione nelle origini dei dati ODBC, negli attributi di connessione ODBC o nelle proprietà di connessione OLE DB impostate nell'applicazione prima della connessione a un'istanza di SQL Server. Il valore predefinito per SET ANSI_NULLS è OFF.

Quando l'opzione SET ANSI_DEFAULTS è impostata su ON, l'opzione SET ANSI_NULLS risulta abilitata.

L'opzione SET ANSI_NULLS viene impostata in fase di esecuzione, non in fase di analisi.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito.

DECLARE @ANSI_NULLS VARCHAR(3) = 'OFF';
IF ( (32 & @@OPTIONS) = 32 ) SET @ANSI_ NULLS = 'ON';
SELECT @ANSI_ NULLS AS ANSI_ NULLS;

È richiesta l'appartenenza al ruolo public.

Nell'esempio seguente vengono utilizzati gli operatori di confronto Uguale a (=) e Diverso da (<>) per confrontare i valori NULL e non Null di una tabella. Viene inoltre illustrato che l'impostazione dell'opzione SET ANSI_NULLS non influisce su IS NULL.

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

-- Print message and perform SELECT statements.
PRINT 'Testing default setting';
DECLARE @varname int; 
SET @varname = NULL;

SELECT a
FROM t1 
WHERE a = @varname;

SELECT a 
FROM t1 
WHERE a <> @varname;

SELECT a 
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;
SET @varname = NULL

SELECT a 
FROM t1 
WHERE a = @varname;

SELECT a 
FROM t1 
WHERE a <> @varname;

SELECT a 
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;
SET @varname = NULL;
SELECT a 
FROM t1 
WHERE a = @varname;

SELECT a 
FROM t1 
WHERE a <> @varname;

SELECT a 
FROM t1 
WHERE a IS NULL;
GO

-- Drop table t1.
DROP TABLE dbo.t1;
Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft