2008-10-23 14 views
16

¿Cuál es el mejor tipo de datos en SQL para representar Decimal en .NET?.NET Decimal = ¿qué en SQL?

Queremos almacenar números decimales con una precisión de hasta 9 decimales y queremos evitar errores de redondeo, etc. en la interfaz.

Al leer acerca de los tipos de datos, aparece el uso de Decimal en .NET es la mejor opción porque no obtendrá errores de redondeo, aunque es un poco más lento que un Doble.

Queremos llevar esto a la base de datos y queremos problemas mínimos de conversión al mover datos a través de las capas. ¿Alguna sugerencia?

Respuesta

2

Si está utilizando SQL Server, this table podría ayudar con asignaciones de tipos de datos.

25

Así que hicimos algunas pruebas en SQL Server. Parece que el tipo sql decimal no puede almacenar completamente cualquier decimal .net.

SQL Server puede almacenar un número hasta 38 decimal digits long. Ese es el total de la cantidad de dígitos a la izquierda y a la derecha del lugar decimal. Establece una 'Escala', que le dice al servidor SQL cuántos dígitos decimales debe reservar para el número a la derecha de la posición decimal. Si configura una escala, eso le quita la cantidad de dígitos a la izquierda del punto decimal. (Precisión - Escala = número de dígitos decimales a la izquierda del lugar decimal)

.NET puede representar hasta 28 dígitos a la derecha del punto decimal y 29 a la izquierda. Eso requeriría una precisión de 57 en SQL Server, pero el máximo disponible es 38.

Así que si quieres conseguir tanta precisión como sea posible y su número son lo suficientemente pequeño, entonces usted puede hacer esto:

decimal(38, 28) 

Eso le dejaría con 10 dígitos a la izquierda y 28 dígitos a la derecha. Por lo tanto, no se podría representar cualquier número mayor a 9999999999, pero no se perderá precisión al realizar transacciones de tipo de moneda.

Por otro lado, si sus números son muy grandes podría almacenar con esta declaración:

decimal(38, 9) 

Esto le permitiría almacenar el número más grande que puede almacenar decimal .NET, que es de 29 dígitos largo. Te dejaría con solo 8 dígitos decimales de precisión.

Si nada de esto suena atractivo, entonces puede simplemente almacenarlos como varchar. Eso le permitiría guardar cualquier decimal .net pero no le permitiría realizar ningún cálculo sobre ellos en SQL.

Cuestiones relacionadas