0

我有一个表#DateDay_temp,其中有一列ExtraAdultPricetype 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 时转换失败。

帮助将不胜感激。

4

2 回答 2

2

最有可能发生此错误是因为0您的CASE语句中有 a ;因此,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

于 2012-10-23T07:17:34.527 回答
0

由于小数点,54.56 不是 int。

于 2012-10-23T07:15:57.463 回答