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


Допустимость значений 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 исключения возникают для всех ошибок переполнения и потери точности, а также для ошибок деления на ноль.

См. также

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

Типы данных SQL Server в платформе .NET Framework