Condividi tramite


Confronto tra valori Null e logica a tre valori

Si applica a:SQL Server

Se si ha familiarità con i tipi di dati di SQL Server, è possibile trovare semantica e precisione simili nello spazio dei nomi System.Data.SqlTypes in .NET Framework. Esistono tuttavia alcune differenze e questo articolo illustra le differenze più importanti.

Valori Null

Una differenza principale tra i tipi di dati CLR (Common Language Runtime) nativi e i tipi di dati di SQL Server è che il primo non consente i valori NULL, mentre quest'ultimo fornisce semantica completa NULL.

I confronti sono interessati dai valori NULL. Quando si confrontano due valori x e y, se x o y è NULL, alcuni confronti logici restituiscono un valore UNKNOWN anziché true o false.

Tipo di dati SqlBoolean

Lo spazio dei nomi System.Data.SqlTypes introduce un tipo SqlBoolean per rappresentare questa logica a tre valori. I confronti tra qualsiasi SqlTypes restituiscono un tipo di valore SqlBoolean. Il valore UNKNOWN è rappresentato dal valore Null del tipo SqlBoolean. Le proprietà IsTrue, IsFalsee IsNull vengono fornite per controllare il valore di un tipo di SqlBoolean.

Operazioni, funzioni e valori Null

Tutti gli operatori aritmetici (+, -, *, /, %), operatori bit per bit (~, &e |) e la maggior parte delle funzioni restituisce NULL se uno degli operandi o argomenti di SqlTypes è Null. La proprietà IsNull restituisce sempre un valore true o false.

Precisione

I tipi di dati decimali in CLR di .NET Framework hanno valori massimi diversi rispetto ai tipi di dati numerici e decimali in SQL Server. Inoltre, nei tipi di dati decimali CLR di .NET Framework si presuppone la precisione massima. In CLR per SQL Server, tuttavia, SqlDecimal fornisce la stessa precisione e scala massima e la stessa semantica del tipo di dati decimal in SQL Server.

Rilevamento overflow

In .NET Framework CLR, l'aggiunta di due numeri molto grandi potrebbe non generare un'eccezione. Se invece non viene usato alcun operatore check, il risultato restituito potrebbe eseguire il wrapping di come numero intero negativo. In System.Data.SqlTypesle eccezioni vengono generate per tutti gli errori di overflow e underflow e gli errori di divisione per zero.