将nvarchar转换为int时出错

时间:2012-10-23 07:13:54

标签: sql

我有一个表#DateDay_temp,其中有一个ExtraAdultPrice类型的列NVARCHAR(20)。当我尝试在存储过程中运行此语句时

DECLARE @ExtraAdultPAX DECIMAL(10,2)

SELECT 
    @ExtraAdultPAX = SUM(CAST((CASE ISNULL(ExtraAdultPrice, '') 
                                  WHEN '' THEN 0 
                                  ELSE ExtraAdultPrice END) AS DECIMAL(10,2))) 
FROM #DateDay_temp;

当我在ExtraAdultPrice“列中传递值54.56时,出现错误

  

将nvarchar值'54 .56'转换为数据时转换失败   输入int。

帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

最有可能发生此错误的原因是您的0声明中有CASE;因此,CASE语句的“类型”被确定为INT - 这在这里完全错误....

请改为尝试:

SELECT 
    @ExtraAdultPAX = SUM(CAST((CASE ISNULL(ExtraAdultPrice, '') 
                                 WHEN '' THEN 0.00   <<== use "0.00" instead of just "0" !!
                                 ELSE ExtraAdultPrice 
                               END) AS DECIMAL(10,2))) 
FROM 
    #DateDay_temp;

现在,所有内容都应为DECIMAL(10,2),并且不应尝试将您的值转换为INT

答案 1 :(得分:0)

54.56由于小数点而不是int。