SET CONCAT_NULL_YIELDS_NULL en SQL Server

¿Con qué frecuencia pensamos en valores NULL al concatenar NULL con valores de cadena? La concentración de cadenas con valores NULL puede darnos algunos resultados inesperados si no conocemos las opciones SET de la base de datos CONCAT_NULL_YIELDS_NULL.

CONCAT_NULL_YIELDS_NULL las opciones controlan si los resultados de la concatenación se tratarán como valores NULL o de cadena vacía.

Una nota importante de los libros en línea de SQL Server

En una versión futura de SQL Server, CONCAT_NULL_YIELDS_NULL 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 CONCAT_NULL_YIELDS_NULL {ON | APAGADO } 

Descripción

SET CONCAT_NULL_YIELDS_NULL ENCENDIDO

Cuando la opción de base de datos CONCAT_NULL_YIELDS_NULL está en ON, concatenar un valor de cadena con NULL resultará en NULL como salida. Cuando tenemos CONCAT_NULL_YIELDS_NULL como ON, los valores NULL se consideran DESCONOCIDOS, por lo tanto, concatenando un valor de cadena con rendimientos UNKNOWN en UNKNOWN, NULL como resultado.

Ejemplo:

SET CONCAT_NULL_YIELDS_NULL ON; SELECCIONE 'recetas técnicas' + NULL; --resultados en NULL. 

SET CONCAT_NULL_YIELDS_NULL OFF

Cuando la opción de base de datos CONCAT_NULL_YIELDS_NULL está en OFF, concatenar un valor de cadena con NULL devolverá una cadena como salida. Cuando tenemos CONCAT_NULL_YIELDS_NULL como DESACTIVADO, los valores NULL se consideran como una cadena vacía, por lo tanto, concatenar un valor de cadena con los rendimientos de cadena vacía en una cadena como salida porque se considera como VERDADERO en lugar de DESCONOCIDO.

Ejemplo:

SET CONCAT_NULL_YIELDS_NULL OFF; SELECCIONE 'recetas técnicas' + NULL; --resultados en 'recetas tecnológicas'. 

En futuras versiones de SQL Server, la opción de configuración CONCAT_NULL_YIELDS_NULL quedará en desuso. Por lo tanto, debemos evitar usarlo en futuros trabajos de desarrollo. Podemos usar el ISNULL o COALESCE Función para manejar el comportamiento de los valores NULL al concatenar cadenas. También es aconsejable utilizar Función CONCAT para concat cadenas introducidas con la edición de SQL Server 2012 que maneja perfectamente la concatenación de valores NULL.

Utilice la función CONCAT / ISNULL / COALESCE en lugar de CONCAT_NULL_YIELDS_NULL

Los siguientes ejemplos deben seguirse mientras se escribe el código en lugar de usar las opciones de la base de datos CONCAT_NULL_YIELDS_NULL mientras se concatenan cadenas.

DECLARE @ MyVar1 como VARCHAR (50) = 'Usted es', @ MyVar2 como VARCHAR (50) = NULL, @ MyVar3 como VARCHAR (50) = 'en tech-recipes.com'; SELECCIONE CONCAT (@MyVar1, @MyVar2, @MyVar3); 

En el ejemplo anterior, estamos utilizando la función CONCAT introducida con SQL Server 2012. Se tratará NULL en la variable @ MyVar2 como una cadena vacía mientras se concatenan cadenas. Siempre es mejor usar esta función en lugar de jugar con la opción configurada CONCAT_NULL_YIELDS_NULL para evitar cualquier cambio de código, ya que esta configuración quedará obsoleta.

DECLARE @ MyVar1 como VARCHAR (50) = 'Usted es', @ MyVar2 como VARCHAR (50) = NULL, @ MyVar3 como VARCHAR (50) = 'en tech-recipes.com'; SELECCIONE ISNULL (@ MyVar1, ") + ISNULL (@ MyVar2,") + ISNULL (@ MyVar3, "); 

En el ejemplo anterior, estamos usando la función ISNULL para verificar y reemplazar cualquier ocurrencia NULL con una cadena vacía en lugar de usar la configuración CONCAT_NULL_YIELDS_NULL. Podemos usar la función ANSI COALESCE también en lugar de ISNULL.