2013-04-29 11 views
2

У меня есть следующая таблица и переменнаяКонверсия удалось при преобразовании DateTime из строки символов

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_ID на CAST(Value_ID AS nvarchar(255))

+0

'Конверсия не удалась при преобразовании значения nvarchar '04/29/2013 'в тип данных int.' – hermann

+0

и заменить Value_ID на CAST (Value_ID AS nvarchar (255)) –

+0

теперь он работает, пожалуйста, добавьте это в свой первоначальный ответ , Спасибо. – hermann

1

Проблема здесь в том, что столбец FV в таблице результатов можно получить различные типы в зависимости от строки заказа в таблице @TSV_WithTarget. Вы должны преобразовать ВСЕ результаты CASE в ОДИН тип nvarchar.

Например, первая строка, отличная от NULL, равна GETDATE, поэтому SQL определяет FV как datetime. И так далее.

Смежные вопросы