2009-01-04 13 views

risposta

16

From MSDN:

Lo standard SQL-92 richiede che un uguale (=) o meno uguale a (<>) confronto con un valore nullo restituisce false. Quando SET ANSI_NULLS è ON, un'istruzione SELECT che utilizza WHERE column_name = NULL restituisce zero righe anche se esistono valori null in column_name. Un'istruzione SELECT che utilizza WHERE nome_colonna <> NULL restituisce zero righe anche se non ci sono valori non nulli in column_name.

Quando SET ANSI_NULLS è OFF, gli operatori di confronto Equals (=) e Not Equal To (<>) non seguono lo standard SQL-92. Un'istruzione SELECT che utilizza WHERE column_name = NULL restituisce le righe con valori null in column_name. Un'istruzione SELECT che utilizza WHERE nome_colonna <> NULL restituisce le righe con valori non nulli nella colonna. Inoltre, un'istruzione SELECT che utilizza WHERE nome_colonna <> XYZ_value restituisce tutte le righe che non sono il valore XYZ e che non sono NULL.

+1

Il primo risultato in una ricerca di Google SET ANSI NULLS ON. Penseresti che sarebbe più veloce cercarlo anziché pubblicare una domanda qui. –

+0

È esattamente come l'ho trovato io stesso. : D – dkretz

+1

Questa risposta non dovrebbe essere revocata, fino a quando non viene risolta: non dovrebbe semplicemente collegarsi alle informazioni, ma dovrebbe anche citarla. Non è questo il punto di SO? – Paulius

9

Cambia il comportamento di NULL s. NULL s in cose rendimento ANSI come

NULL = NULL -> false

NULL <> NULL -> false

Con ANSI_NULLS off, (NULL = NULL) -> vero.

0

Quando sulla allora non contano i valori Null e tornare 0.

Quando questo è attivo, tutte le query che confronta un valore con un null restituisce un 0

Esempio: SET ANSI_NULLS ON SELECT empname FROM emp1 WHERE telefono = NULL

Spiegazione: Non restituirà nulla perché SET ANSI_NULLS è ON.

Fonte:

http://www.xpode.com/ShowArticle.aspx?ArticleId=599

Grazie,

Rohit

0

SET ANSI_NULLS OFF indica al server di valutare le dichiarazioni che coinvolgono NULL utilizzando la semantica non standard.

SET ANSI_NULLS OFF; 
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 1 (bad!) 
SET ANSI_NULLS ON; 
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 0 (good!) 

si dovrebbe mai creare nuovo codice con con l'impostazione semantica non-standard di SET ANSI_NULLS OFF perché:

  • Non è mai necessario,
  • Per le query di database di comportarsi con i ricchi semantica che si verificano quando NULL viene trattato in modo diverso da qualsiasi altro valore (ad esempio in una clausola WHERE), i valori confrontati con NULL devono sempre restituire False/SCONOSCIUTO,
  • Rende il codice più difficile da mantenere poiché gli sviluppatori potrebbero non capire che sta utilizzando l'impostazione non standard o essere confuso da esso e
  • Microsoft has warned che in una versione futura di SQL Server l'impostazione causerà un errore esplicito .