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

¿Qué es el literal de carácter nulo en TSQL?

Hay dos comportamientos diferentes en la respuesta de Cade Roux:el reemplazo es exitoso (cuando se usa la intercalación de SQL) y no tiene éxito (se usa la intercalación de Windows). El motivo está en el tipo de intercalación utilizada.

Este comportamiento se envió a Microsoft hace casi 4 años:

P: Al intentar reemplazar un carácter NUL con replace(), esto funciona si el valor tiene una intercalación de SQL, pero no una intercalación de Windows.

R: Esto se debe al hecho de que 0x0000 es un carácter indefinido en las intercalaciones de Windows. Todos los caracteres no definidos se ignoran durante la comparación, clasificación y coincidencia de patrones. Así que buscar 'a' + char(0) es realmente buscar 'a', y buscar char(0) es equivalente a una cadena vacía.

La forma de manejar caracteres indefinidos es un poco confusa, pero esta es la forma en que Windows definió para clasificarlos, y SQL Server se ajusta a la API general de Windows.

En la intercalación de SQL, no existe la noción de carácter indefinido. A cada punto de código se le asigna un peso, por eso no vemos ningún problema allí.

pero desafortunadamente, todavía no está documentado.

Entonces, parece que la única solución es cambiar la intercalación a la intercalación SQL (por ejemplo, SQL_Latin1_General_CP1_CI_AS también se puede usar).

Eliminé mi respuesta anterior por innecesaria