Поделиться через


Допустимость значений 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.

Точность

Десятичные типы данных в среде CLR платформы .NET Framework имеют максимальные значения, отличные от значений числовых и десятичных типов в SQL Server. Кроме того, десятичные типы данных в среде CLR платформы .NET Framework предполагают максимальную точность. Однако, в среде CLR для SQL Server тип SqlDecimal обеспечивают такую же максимальную точность и масштаб, и такую же семантику, как десятичный тип данных в SQL Server.

Обнаружение переполнений

В среде CLR платформы .NET Framework, сложение двух очень больших чисел может не привести к возникновению исключения. Вместо этого, если не был использован оператор проверки, возвращенный результат может «обратиться» в отрицательное целое число. В System.Data.SqlTypes исключения возникают для всех ошибок переполнения и потери точности, и ошибок деления на ноль.

См. также

Другие ресурсы