SET ANSI_NULLS (ON | OFF) en SQL Server

los ANSI_NULLS La opción SET de la base de datos controla el comportamiento de los operadores de igualdad (=) y de comparación (! =) en las consultas al tratar con registros NULL. Es un estándar ISO decidir una acción de consulta para concluir cómo SQL Server debe manejar la comparación con los NULL.

La mayoría de nosotros debe haber visto la configuración ANSI_NULLS (ON | OFF) utilizada al inicio de un procedimiento almacenado, una función u otros objetos de la base de datos.

Nota importante de los libros de SQL Server en línea:

En una versión futura de SQL Server, ANSI_NULLS siempre estará ACTIVADO, y cualquier aplicación que establezca explícitamente la opción a DESACTIVADO generará un error. Evite usar esta función en nuevos trabajos de desarrollo y planee modificar las aplicaciones que actualmente usan esta función.

Sintaxis

SET ANSI_NULLS {ON | APAGADO } 

SET ANSI_NULLS ON

Cuando la opción de base de datos ANSI_NULL se establece en EN, luego una comparación con los rendimientos de los registros NULL. DESCONOCIDO. Por lo tanto, no se devuelven filas. Si compara algo con NULL, resultará como DESCONOCIDO, y también NULL = NULL la comparación será considerada como DESCONOCIDA. No se puede comparar NULL con nada. Esta es una norma ISO cuando se trata de registros NULL.

SET ANSI_NULLS OFF

Cuando la opción de base de datos ANSI_NULLS está establecida en APAGADO, luego una comparación con registros NULL devuelve filas como una comparación que evalúa a CIERTO en lugar de DESCONOCIDO. Esto es anular el comportamiento ISO. Con ANSI_NULLS OFF, la comparación con NULL registra resultados en TRUE; Por lo tanto, se devuelven los registros. Cuando se utiliza la opción de base de datos ANSI_NULLS OFF, SQL Server considera NULL como valores especiales cuando se compara con otros registros.

Ejemplos ANSI_NULLS

Vamos a crear una tabla temporal de empleados y rellenarla con algunos registros de prueba.

SI OBJECT_ID ('tempdb ... #Employee') NO ES NULL TABLE TABLE #Employee; CREAR TABLA #Empleado (Id. IDENTIDAD INT (1, 1) CLAVE PRIMARIA, Nombre VARCHAR (100) NO NULO, Salario INT NULO); INSERTE EN # VALORES Empleados ('Niraj', 125), ('Vish', 80), ('Chetan', 235), ('Imans', NULL); SELECT * FROM #Employee; 

Como se vio anteriormente, estamos seleccionando todos los registros de las tablas de empleados y destacando los registros NULL y NOT NULL.

Diferenciar los registros nulos y no nulos

- Método estándar para probar NULL SELECT * FROM #Employee WHERE Salary IS NULL; SELECT * FROM #Employee WHERE Salary NO NULL; 

El ejemplo anterior muestra el método estándar para recuperar registros NULL de la tabla. Este es el enfoque más recomendado cuando se trata de valores NULL.

SET ANSI_NULLS ON

--Ajuste la opción ANSI_NULLS en ON - No devuelve ninguna fila siguiendo el comportamiento ISO. SET ANSI_NULLS ON SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

En el ejemplo anterior, ANSI_NULLS está activado. Por lo tanto, la comparación con los valores NULL se evalúa como DESCONOCIDA, por lo que no se devuelven filas.

SET ANSI_NULLS OFF

- Establezca la opción ANSI_NULLS en OFF - Devuelve los registros que tienen NULL Anulación del comportamiento ISO SET ANSI_NULLS OFF SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

En el ejemplo anterior, ANSI_NULLS está desactivado. Por lo tanto, una comparación con valores NULL se evalúa como VERDADERO. Esto le da a los valores NULL un significado especial y los registros son devueltos por las consultas anteriores.

Lea más sobre la base de datos y la programación de SQL de Tech-Recipes.