SET ANSI_NULLS (ON | OFF) in SQL Server

Il ANSI_NULLS l'opzione SET del database controlla il comportamento di Equal (=) e operatori di confronto (! =) nelle query mentre si gestiscono i record NULL. È uno standard ISO decidere per un'azione di query per concludere in che modo SQL Server deve gestire il confronto con NULL.

La maggior parte di noi deve aver visto l'impostazione ANSI_NULLS (ON | OFF) utilizzata all'inizio di una stored procedure, una funzione o altri oggetti di database.

Nota importante della documentazione online di SQL Server:

In una versione futura di SQL Server, ANSI_NULLS sarà sempre attivo e tutte le applicazioni che impostano esplicitamente l'opzione su OFF genereranno un errore. Evitare l'uso di questa funzione in un nuovo lavoro di sviluppo e pianificare di modificare le applicazioni che attualmente utilizzano questa funzione.

Sintassi

SET ANSI_NULLS {ON | OFF} 

SET ANSI_NULLS ON

Quando l'opzione del database ANSI_NULL è impostata su SOPRA, quindi un confronto con i rendimenti dei record NULL SCONOSCIUTO. Quindi, non vengono restituite righe. Se si confronta qualcosa con NULL, risulterà come UNKNOWN, e anche il NULL = NULL il confronto sarà considerato come SCONOSCIUTO. Non puoi confrontare NULL contro nulla. Questo è uno standard ISO quando si tratta di record NULL.

SET ANSI_NULLS OFF

Quando l'opzione del database ANSI_NULLS è impostata su OFF, quindi un confronto con i record NULL restituisce le righe come confronto a cui valutare VERO invece di UNKNOWN. Ciò sta annullando il comportamento ISO. Con ANSI_NULLS OFF, il confronto con i record NULL risulta TRUE; di conseguenza, i record vengono restituiti. Quando si utilizza l'opzione di database ANSI_NULLS OFF, SQL Server considera NULL come valori speciali quando si confrontano con altri record.

Esempi ANSI_NULLS

Creiamo una tabella temporanea del dipendente e la popoliamo con alcuni record di test.

IF OBJECT_ID ('tempdb ... #Employee') NON È NULL DROP TABLE #Employee; CREATE TABLE #Employee (Id INT IDENTITY (1, 1) PRIMARY KEY, Nome VARCHAR (100) NOT NULL, Salary INT NULL); INSERISCI I VALORI #Employee ('Niraj', 125), ('Vish', 80), ('Chetan', 235), ('Imans', NULL); SELECT * FROM #Employee; 

Come visto sopra, stiamo selezionando tutti i record dalle tabelle dei dipendenti e evidenziando i record NULL e NOT NULL.

Differenziare i record NULL e NOT NULL

- Metodo standard per verificare NULL SELECT * FROM #Employee WHERE Salary IS NULL; SELECT * FROM #Employee WHERE Lo stipendio NON È NULL; 

L'esempio sopra mostra il metodo standard per recuperare i record NULL dalla tabella. Questo è l'approccio più consigliato quando si ha a che fare con valori NULL.

SET ANSI_NULLS ON

- Imposta l'opzione ANSI_NULLS su ON - Non restituisce alcuna riga che segue il comportamento ISO SET ANSI_NULLS ON SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

Nell'esempio sopra, ANSI_NULLS è ON. Pertanto, il confronto con i valori NULL viene valutato come UNKNOWN, quindi non viene restituita alcuna riga.

SET ANSI_NULLS OFF

- Imposta l'opzione ANSI_NULLS su OFF - Restituisce i record con NULL che annullano il comportamento ISO SET ANSI_NULLS OFF SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

Nell'esempio sopra, ANSI_NULLS è OFF. Quindi, un confronto con valori NULL viene valutato come VERO. Ciò conferisce ai valori NULL un significato speciale e i record vengono restituiti dalle query sopra.

Maggiori informazioni sulla programmazione di database e SQL da Tech-Recipes.