2012-10-23 170 views
0

我有一个表#DateDay_temp,其中有类型的NVARCHAR(20)类型。当我尝试当我传递值54.56在ExtraAdultPrice“列在存储过程中将nvarchar转换为int时出错

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; 

运行此声明,我得到的错误转换nvarchar的值时

转换失败'54 0.56' 到数据 int类型。

帮助将不胜感激。

+1

'54.56'是**不是** int **值..... –

+3

而** WHY **是类型为'NVARCHAR( 20)'?!?!?!? –

+0

因为它可以有任何值 –

回答

0

54.56因小数点而不是int。

+0

这是我卡在哪里。 –

+0

由于@marc_s建议您需要使用小数点,如果您保留小数点。 – DaveHogan

2

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

+0

这确实会改变语义。 OP的原始代码会将NULL或空字符串视为零。如果他们只关心'NULL',那么无论如何都会在'SUM'中忽略它们。 –

+0

@marc_s:当ExtraAdultPrice呈现空值或空值时,我收到错误“将数据类型nvarchar转换为数字时出错”。 –

+0

@palakmehta:更新了我的响应 - 现在它应该将NULL和空格转换为'0.00'并将其总结为'DECIMAL(10,2)' –

相关问题