Compartir a través de


Nulabilidad y comparaciones lógicas de tres valores

Si está familiarizado con los tipos de datos de SQL Server, observará una semántica y precisión similares en el espacio de nombres System.Data.SqlTypes de .NET Framework. No obstante, existen algunas diferencias, y en este tema se describen las más importantes.

Valores NULL

Una de las diferencias principales que existen entre los tipos de datos nativos de Common Language Runtime (CLR) y los tipos de datos de SQL Server es que los primeros no permiten valores NULL, mientras que los últimos proporcionan una semántica completa de valores NULL.

Los valores NULL afectan a las comparaciones. Al comparar dos valores x e y, si alguno de los dos es NULL, hay una serie de comparaciones lógicas que se evalúan como un valor UNKNOWN en lugar de como True o False.

Tipo de datos SqlBoolean

El espacio de nombres System.Data.SqlTypes introduce un tipo SqlBoolean para representar esta lógica de 3 valores. Las comparaciones entre SqlTypes devuelven un tipo de valor SqlBoolean. El valor UNKNOWN se representa mediante un valor NULL de tipo SqlBoolean. Las propiedades IsTrue, IsFalse e IsNull se proporcionan para comprobar el valor de un tipo SqlBoolean.

Operaciones, funciones y valores NULL

Todos los operadores aritméticos (+, -, *, /, %), los operadores bit a bit (~, &, y |) y la mayoría de las funciones devuelven NULL si alguno de los operandos o argumentos de SqlTypes es NULL. La propiedad IsNull siempre devuelve un valor True o False.

Precisión

Los tipos de datos decimales de .NET Framework CLR tienen distintos valores máximos que los de los tipos de datos numéricos y decimales de SQL Server. Además, en .NET Framework CLR, los tipos de datos decimales asumen la precisión máxima. Sin embargo, en CLR para SQL Server, SqlDecimal proporciona la misma precisión máxima, la misma escala máxima y la misma semántica que el tipo de datos decimal de SQL Server.

Detección de desbordamiento

En .NET Framework CLR, la suma de dos números muy grandes no puede iniciar una excepción. En lugar de ello, si no se ha utilizado ningún operador de comprobación, el resultado devuelto puede "ajustarse" como un número entero negativo. En System.Data.SqlTypes, se inician excepciones para todos los errores de desbordamiento, subdesbordamiento y división por cero.