将nvarchar值'xxx'转换为数据类型int时转换失败

时间:2012-11-19 11:43:17

标签: sql sql-server


下面的查询会引发标题中提到的错误:

SELECT
   Set_To_Value_ID,
CASE 
   WHEN Set_To_Variable_ID IS NOT NULL THEN Set_To_Variable_ID 
   WHEN Changed_In_SP IS NOT NULL THEN Changed_In_SP
   WHEN Comment_Input IS NOT NULL THEN ( Select Comment FROM Process_Instance WHERE Process_Instance_ID = @Process_Instance_ID )
END AS Manual_Value
FROM Variables
WHERE Some_Irrelevant_Value = @Some_Irrelevant_Value 

我知道错误来自于Comment_Input案例,因为那是应该从那里返回的值。

2 个答案:

答案 0 :(得分:4)

使用CASE表达式时,所有结果必须具有相同的数据类型。

  

从中输入类型集中的最高优先级类型   result_expressions和可选的else_result_expression。

http://msdn.microsoft.com/en-us/library/ms181765.aspx

我建议将int数据类型转换为nvarchar,以便SQL不会尝试将nvarchar转换为int:

CASE 
   WHEN Set_To_Variable_ID IS NOT NULL THEN CAST(Set_To_Variable_ID as nvarchar(20))
   WHEN Changed_In_SP IS NOT NULL THEN THEN CAST(Changed_In_SP as nvarchar(20))
   WHEN Comment_Input IS NOT NULL THEN ( Select Comment FROM Process_Instance WHERE Process_Instance_ID = @Process_Instance_ID )
END AS Manual_Value

答案 1 :(得分:0)

检查表上的依赖项,如触发器,视图或与其他表的关系......它们可能具有此特定列的int数据类型