Допустимость значений NULL и трехзначная логика сравнения
Знакомые с типами данных SQL Server пользователи найдут сходную семантику и точность в пространстве имен System.Data.SqlTypes платформы .NET Framework. Однако существуют определенные различия. В этом разделе описаны самые важные из них.
Значения NULL
Главное различие между типами данных среды CLR и типами данных SQL Server заключается в том, что первые не допускают значений NULL, а вторые реализуют полную семантику NULL.
Значения NULL влияют на результаты сравнений. При сравнении двух значений x и y, если x или y имеет значение NULL, то результатом некоторых логических сравнений будет значение UNKNOWN, а не TRUE или FALSE.
Тип данных SqlBoolean
Пространство имен System.Data.SqlTypes вводит тип SqlBoolean для представления трехзначной логики. Сравнения каких-либо SqlTypes возвращают значения типа SqlBoolean. Значение UNKNOWN представлено значением NULL типа SqlBoolean. Свойства IsTrue, IsFalse и IsNull обеспечивают возможность проверки значения типа SqlBoolean.
Операции, функции и значения NULL
Все арифметические операторы (+, -, *, /, %), битовые операции (~, &, |) и большинство функций возвращают NULL, если какие-либо из операндов или аргументов SqlTypes равны NULL. Свойство IsNull всегда возвращает значение TRUE или FALSE.
Точность
Максимальные значения типов данных decimal в среде CLR платформы .NET Framework отличаются от максимальных значений числовых типов и типов decimal в SQL Server. Кроме того, типы данных decimal в среде CLR платформы .NET Framework предполагают использование максимальной точности. Однако в среде CLR для SQL Server тип SqlDecimal обеспечивает такую же максимальную точность и масштаб, а также такую же семантику, как и у типа данных decimal в SQL Server.
Обнаружение переполнений
В среде CLR платформы .NET Framework сложение двух очень больших чисел не может вызвать исключение. При этом если не использовался оператор проверки, возвращенный результат может «обернуться по кругу» и превратиться в отрицательное целое число. В System.Data.SqlTypes исключения возникают для всех ошибок переполнения и потери точности, а также для ошибок деления на ноль.