web-dev-qa-db-ja.com

DTS参加時のタイプの不一致

私はETLを初めて使用し、VB一般的に、この問題を解決するためのサポートが必要です。オンラインで調べたところ、興味深い回答がいくつか見つかりましたが、どれもうまく機能していないようです。

varamt = Lookup (
    "Lookup_tbl1", 
    [Lookup_tbl1].[Amount], 
    Array(DTSSource("DEPT_ID"), DTSSource("ACCT_ID")))

IF NOT isEmpty(varamt) or NOT isNULL(varamt) or NOT varamt="" THEN
    DTSDestination("AMOUNT") = varamt
ELSE
    DTSDestination("AMOUNT") = DTSSource("AMOUNT")
END IF

Lookup_tbl1の主キーはACCT_IDDEPT_IDです。私の宛先テーブルには主キーとしてこれらがなく、ACCT_IDのテーブルにはNULL値があります。 Dept_IDAcct_IDはvarcharです。

ACCT_IDNULLではない場所でこの変換を試したところ、機能しましたが、機能させたいテーブルでは機能しませんでした。

これが私が得るエラーメッセージです:

Inserting into [AMOUNT] ...
Error details: The number of failing rows exceeds the maximum specified.
(Microsoft Data Transformation Services (DTS) Data Pump (80020101): 
Error Code: 0 Error Source= Microsoft VBScript runtime error 
Error Description: Type mismatch: 'Join' Error on Line 36)
Execution Failed.`

私のコードには36行目がありません。解決策/指針を提案してください。

1
Drj

OK。私は(うまくいけば)根本的な原因を見つけてそれを回避することができました。おそらく理由はタイプの不一致でした 'join'はACCT_IDはソーステーブルでNULLでした。

以下はうまくいきました:

IF NOT isNULL(DTSSource("ACCT_ID"))
    varamt = Lookup ("Lookup_tbl1",
        [Lookup_tbl1].[Amount],
        Array(DTSSource("DEPT_ID"), DTSSource("ACCT_ID")))
    IF (NOT isEmpty(varamt) or NOT isNULL(varamt)) or varamt<>"" THEN
        DTSDestination("AMOUNT") = varamt
    ELSE
        DTSDestination("AMOUNT") = DTSSource("AMOUNT")
    END IF
ELSE
    DTSDestination("AMOUNT") = DTSSource("AMOUNT")
END IF
1
Drj