2013-10-21 84 views
-1
ALTER FUNCTION [dbo].[avgGpa]() 
RETURNS decimal(3,2) 
AS 
BEGIN 
    DECLARE @CalcGPA decimal(10,2) 
    DECLARE @CalcGPA2 decimal(3,2) 

    SELECT @CalcGPA = SUM(cast(GPA AS decimal(10,2))) from dbo.Students 
    SELECT @CalcGPA2 = cast(ROUND((@CalcGPA/1000),2) AS decimal(3,2)) 

    RETURN @CalcGPA2 
END 
+1

(1)你为什么要做这个功能? (2)你为什么要将GPA存储为字符串? (3)[为什么你多次提问相同的问题](http://stackoverflow.com/questions/19484825/msg-8115-arithmetic-overflow-error-converting-numeric-to-data-type-numeric-and )? –

+0

此链接返回的重复问题已被删除。看起来像过度热心的节制? – StuartQ

回答

0

错误是通过将精度大于精度的值转换为值转换而引发的。

下面是重现该错误的示例:

declare @d10 decimal(10,2)=12345678.12 

    select CAST(@d10 as decimal(3,2)) 
1

给一个更大的精度值。

ALTER FUNCTION [dbo].[avgGpa]()  
RETURNS decimal(15,2) 
相关问题