适用范围: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
类型来表示此三值逻辑。 任何 SqlTypes
之间的比较返回 SqlBoolean
值类型。
UNKNOWN
值由 SqlBoolean
类型的 null 值表示。 提供属性 IsTrue
、IsFalse
和 IsNull
来检查 SqlBoolean
类型的值。
操作、函数和 null 值
所有算术运算符(+
、-
、*
、/
、%
)、按位运算符(~
、&
和 |
),如果 SqlTypes
的任何操作数或参数为 null,则大多数函数将返回 NULL
。
IsNull
属性始终返回 true
或 false
值。
Precision
.NET Framework CLR 中的十进制数据类型的最大值与 SQL Server 中的数值和十进制数据类型不同。 此外,在 .NET Framework CLR 十进制数据类型中,假定最大精度。 但是,在 SQL Server 的 CLR 中,SqlDecimal
提供与 SQL Server 中的十进制数据类型相同的最大精度和小数位数和语义。
溢出检测
在 .NET Framework CLR 中,添加两个非常大的数字可能不会引发异常。 相反,如果未使用 check 运算符,则返回的结果可能会 环绕 为负整数。 在 System.Data.SqlTypes
中,为所有溢出和下溢错误以及除以零错误引发异常。
相关内容
- .NET Framework 中的 SQL Server 数据类型