我有以下表格和变量
DECLARE @FunctionValue nvarchar(255)
DECLARE @TSV_WithTarget TABLE
(
Transition_Set_Variable_ID INT,
[Value] nvarchar(255),
TargetTable nvarchar(255),
TargetColumn nvarchar(255),
FunctionValue nvarchar(255)
)
该表包含以下数据:
IF (SELECT FunctionValue
FROM @TSV_WithTarget
WHERE Transition_Set_Variable_ID = @TSV_Target_Counter
AND FunctionValue IS NOT NULL ) IS NOT NULL
BEGIN
SELECT FunctionValue
FROM @TSV_WithTarget
END
显然,如果我取消注释任何注释掉的行,这里的代码会产生以下错误。
SET @FunctionValue = ( SELECT CASE
--WHEN FunctionValue LIKE 'DATEADD%' THEN ( SELECT FunctionValue
-- FROM @TSV_WithTarget
-- WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )
WHEN FunctionValue LIKE 'GETDATE' THEN ( SELECT GETDATE() )
--WHEN FunctionValue LIKE 'STORED PROCEDURE' THEN ( SELECT Changed_In_SP
-- FROM BPE_T_VA_Transition_Set_Variable
-- WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )
--WHEN FunctionValue LIKE 'SWITCH_USER' THEN ( SELECT 'hersem' )
WHEN FunctionValue LIKE 'VALUE' THEN ( SELECT Name
FROM BPE_T_VA_Value
WHERE Value_ID = ( SELECT Set_To_Value_ID
FROM BPE_T_VA_Transition_Set_Variable
WHERE Transition_Set_Variable_ID = @TSV_Target_Counter ) )
WHEN FunctionValue LIKE 'VARIABLE' THEN ( SELECT Value_ID
FROM BPE_T_VA_Process_Instance_Value
WHERE Variable_ID = ( SELECT Set_To_Variable_ID
FROM BPE_T_VA_Transition_Set_Variable
WHERE Transition_Set_Variable_ID = @TSV_Target_Counter )
AND Process_Instance_ID = @Process_Instance_ID)
--ELSE ( SELECT FunctionValue )
END AS FV
FROM @TSV_WithTarget
WHERE Transition_Set_Variable_ID = @TSV_Target_Counter
AND FunctionValue IS NOT NULL )
Msg 241, Level 16, State 1, Line 83
Conversion failed when converting datetime from character string.
我不知道这可能是什么。
答案 0 :(得分:1)
CASE表达式的值必须是相同的类型。因此有必要更换
SELECT GETDATE()
上的{p> CONVERT(nvarchar(10), GETDATE(), 101)
和Value_ID
上的CAST(Value_ID AS nvarchar(255))
答案 1 :(得分:1)
这里的问题是结果表中的列FV
可以获得不同的类型,具体取决于表@TSV_WithTarget
中的行顺序。您应该将所有CASE结果转换为一种类型nvarchar
。
例如 - 第一个非NULL行是GETDATE
,因此SQL将FV
定义为datetime
。等等。