sábado, 21 de julio de 2012

SQL Server trunca divisiones de enteros

Pues eso, revisando una función que entre otras acciones divide dos números enteros (entiéndase dos datos de tipo int)descubrí que sql server trunca el resultado. Aunque esto está claramente documentado en los libros en pantalla me tomó por asalto. Esto puede resultar una verdadera catástrofe para aquellos novatos o algunos con un poquito mas de experiencia que nos descuidamos.
DECLARE @dividendo int, @divisor int

set @dividendo = 50;
set @divisor = 12;

SELECT (@dividendo/@divisor)
GO
El resultado para esta simple operación no es el deseado, puesto que retorna 4 en lugar de 4.166
DECLARE @dividendo int, @divisor int

set @dividendo = 50;
set @divisor = 12;

SELECT (cast(@dividendo as decimal(18,6))/cast(@divisor as decimal(18,6)))
GO
Ahora si obtenemos el dato que realmente necesitamos.
Saludos.