为 Null 性和三值逻辑比较

适用于:SQL Server

如果熟悉 SQL Server 数据类型,可以在 .NET Framework 中的 System.Data.SqlTypes 命名空间中找到类似的语义和精度。 但是,这些数据类型之间存在一些不同之处,本主题介绍了这些不同之处中最重要的内容。

NULL 值

本机公共语言运行时(CLR)数据类型和 SQL Server 数据类型的主要区别在于,前者不允许 NULL 值,而后者提供完整的 NULL 语义。

NULL 值对比较会产生影响。 当对 x 和 y 两个值进行比较时,如果 x 或 y 其中一个为 NULL,则某些逻辑比较将为 UNKNOWN 值而不是 True 或 False。

SqlBoolean 数据类型

System.Data.SqlTypes 命名空间引入了一个 SqlBoolean 类型来表示此 3 值逻辑。 任何 SqlType 之间的 比较返回 SqlBoolean 值类型。 UNKNOWN 值由 SqlBoolean 类型的 null 值表示。 提供属性 IsTrueIsFalseIsNull 来检查 SqlBoolean 类型的值

操作、函数和 NULL 值

所有算术运算符(+、-、*、/、)、按位运算符(~、&、和 |),如果 SqlType 的任何操作数或参数为 NULL,则大多数函数都返回 NULL。 IsNull 属性始终返回 true 或 false 值。

精度

.NET Framework CLR 中的十进制数据类型的最大值与 SQL Server 中的数值和十进制数据类型的值不同。 此外,在 .NET Framework CLR 十进制数据类型中,假定最大精度。 但是,在 SQL Server 的 CLR 中, SqlDecimal 提供与 SQL Server 中十进制数据类型相同的最大精度和小数位数以及相同的语义。

溢出检测

在 .NET Framework CLR 中,添加两个非常大的数字可能不会引发异常。 相反,如果未使用检查运算符,则返回的值可能作为负整数“环绕”。 在 System.Data.SqlTypes 中,为所有溢出和下溢错误以及除以零错误引发异常。

另请参阅

.NET Framework 中的 SQL Server 数据类型