0


下面的查询抛出标题中提到的错误:

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 案例,因为这是应该从那里返回的值。

4

2 回答 2

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
于 2012-11-19T11:45:47.560 回答
0

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

于 2013-05-29T12:12:13.533 回答