2013-10-21 86 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) 
相關問題