Dot-Net
.NET 十進製到 SQL Server 十進制的良好映射是什麼?
我必須將一些 C# 程式碼與 SQL Server 介面,並且我希望在數據庫中儲存值時具有與 C# 程式碼一樣高的精度。我使用 .NET 的
decimal一種類型作為值。我將在 SQL Server 中為這個值使用什麼數據類型/精度?我知道 SQL Server
decimal類型是最有可能滿足我對此需求的類型。我的問題是我使用什麼比例和精度才能匹配.NET 的decimal類型?
您可以使用 SQL Server
decimal類型(此處的文件)。這允許您為數據庫中的數字指定精度和小數位數,您可以將其設置為與 C# 程式碼中的相同。但是,您的問題似乎是關於將 .NET 十進制類型映射到 SQL Server 十進制類型。不幸的是,這並不簡單。SQL Server 十進制以最大精度涵蓋從 -10 38 +1 到 10 38 -1 的範圍。然而,在 .NET 中,它可以覆蓋從 ±10 -28到 ±7.9×10 28的任何位置,具體取決於數量。
原因是,在內部,.NET 將小數與浮點數非常相似——它將其儲存為一對數字、一個尾數和一個指數。如果你有一個特別大的尾數,你會失去一些精度。從本質上講,.NET 允許您混合具有高比例和低比例的數字;SQL Server 要求您提前為給定列選擇它。
簡而言之,為了您的目的,您將需要確定十進制值的有效範圍,並確保您的程序和數據庫都可以處理它。無論如何,您都需要為您的程序執行此操作(如果您將 10 -28與 7.9×10 28之類的值混合,則無論如何都不能依賴十進制類型)。
Fluent nHibernate 將 System.Decimal 映射為
decimal(19, 5)