2013-04-29 152 views
2

我有以下表和变量转换失败

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 

enter image description here

显然,这个代码就在这里如果我取消注释任何注释掉的行,则会产生以下错误。

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.

我不知道这可能是什么。

  • @FunctionValue的设置发生在WHILE循环中。

回答

1

CASE表达式的值必须是相同的类型。因此,有必要更换

SELECT GETDATE()CONVERT(nvarchar(10), GETDATE(), 101)Value_IDCAST(Value_ID AS nvarchar(255))

+0

'将nvarchar值'04/29/2013'转换为数据类型int.' – hermann 2013-04-29 11:05:53

+0

并替换CAST上的Value_ID(Value_ID AS nvarchar(255)) – 2013-04-29 11:08:22

+0

转换失败,请将其添加到您的原始答案。谢谢。 – hermann 2013-04-29 11:12:40

1

这里的问题是,在结果表中的列FV可以得到不同的类型依赖于表中的行@TSV_WithTarget订购。您应该将所有CASE结果转换为一种类型nvarchar

例如 - 第一个非NULL行是GETDATE因此SQL将FV定义为datetime。等等。