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

ここに画像の説明を入力

どうやら、コメントアウトされた行のいずれかのコメントを解除すると、このコードは次のエラーを生成します。

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 ループで行われます。
4

2 に答える 2

1

CASE 式の値は同じ型でなければなりません。そのため交換が必要です

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

于 2013-04-29T11:03:20.233 に答える
1

ここでの問題はFV、テーブル内の行の順序に応じて、結果テーブルの列が異なる型になる可能性があること@TSV_WithTargetです。すべての CASE の結果を 1 つのタイプに変換する必要がありますnvarchar

たとえば、最初の非 NULL 行はGETDATE、SQLFVdatetime. 等々。

于 2013-04-29T11:14:49.473 に答える