sql >> Base de Datos >  >> RDS >> Sqlserver

ANSI_NULLS y QUOTED_IDENTIFIER mataron cosas. ¿Para qué son?

Bien, desde el punto de vista de un desarrollador de aplicaciones, esto es lo que hacen estas configuraciones:

QUOTED_IDENTIFICADOR

Esta configuración controla cómo se marcan las comillas ".." son interpretados por el compilador SQL. Cuando QUOTED_IDENTIFIER está activado, las comillas se tratan como corchetes ([...] ) y se puede usar para citar nombres de objetos SQL como nombres de tablas, nombres de columnas, etc. Cuando está APAGADO (no recomendado), las comillas se tratan como apóstrofes ('..' ) y se puede usar para citar cadenas de texto en comandos SQL.

ANSI_NULLS

Esta configuración controla lo que sucede cuando intenta usar cualquier operador de comparación que no sea IS en NULL. Cuando está activado, estas comparaciones siguen el estándar que dice que la comparación con NULL siempre falla (porque no es un valor, es una bandera) y devuelve FALSE . Cuando esta configuración está DESACTIVADA (realmente no recomendado) puede tratarlo con éxito como un valor y usar = , <> , etc. en él y obtener TRUE según corresponda.

La forma correcta de manejar esto es usar el IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Esta configuración controla si NULL "Propagar" cuando se usa en expresiones de cadena. Cuando esta configuración está activada, sigue el estándar y una expresión como 'some string' + NULL .. siempre devuelve NULL. Por lo tanto, en una serie de concatenaciones de cadenas, un NULL puede hacer que toda la expresión devuelva NULL. Desactivar esto (tampoco se recomienda) hará que los valores NULL se traten como cadenas vacías, por lo que 'some string' + NULL simplemente se evalúa como 'some string' .

La forma correcta de manejar esto es con la función COALESCE (o ISNULL):'some string' + COALESCE(NULL, '') .. .