Comparações de lógica de três valores e nulidade
Se estiver familiarizado com os tipos de dados SQL Server, você achará a semântica e a precisão semelhantes no System.Data.SqlTypes namespace de .NET Framework. No entanto, há algumas diferenças, e este tópico aborda a mais importante delas.
Valores NULL
A principal diferença entre os tipos de dados CLR (Common Language Runtime) nativos e os tipos de dados do SQL Server é que os primeiros não permitem valores NULL, ao passo que os últimos fornecem uma semântica NULL completa.
As comparações são afetadas por valores NULL. Durante a comparação entre dois valores x e y, caso x ou y seja NULL, algumas comparações lógicas são avaliadas como UNKNOWN, e não como verdadeiro ou falso.
Tipo de dados SqlBoolean
O namespace System.Data.SqlTypes introduz um tipo SqlBoolean para representar essa lógica de 3 valores. Comparações entre qualquer SqlTypes retornam um tipo de valor SqlBoolean. O valor UNKNOWN é representado pelo valor nulo do tipo SqlBoolean. São fornecidas as propriedades IsTrue, IsFalsee IsNull para verificar o valor de um tipo SqlBoolean.
Operações, funções e valores NULL
Todos os operadores aritméticos (+, -, *, /, %), operadores bit a bit (~, & e |), e a maioria das funções retornam NULL caso algum dos operandos ou argumentos de SqlTypes seja NULL. A propriedade IsNull sempre retorna um valor verdadeiro ou falso.
Precisão
Tipos de dados decimais no CLR .NET Framework têm valores máximos diferentes em relação aos tipos de dados numéricos e decimais do SQL Server. Além disso, no CLR .NET Framework, tipos de dados decimais supõem a precisão máxima. No CLR do SQL Server, no entanto, SqlDecimal fornece a mesma precisão e escala máximas, além da mesma semântica do tipo de dados decimal do SQL Server.
Detecção de estouro
No CLR .NET Framework, a adição de dois números muito grandes pode não lançar uma exceção. Na verdade, caso nenhum operador de verificação tenha sido usado, o resultado retornado pode ser "delimitado" como um inteiro negativo. Em System.Data.SqlTypes, são lançadas exceções para todos os estouros e erros de estouro, além de erros de divisão por zero.