下面的查询会引发标题中提到的错误:
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案例,因为那是应该从那里返回的值。
答案 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数据类型