私は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_ID
とDEPT_ID
です。私の宛先テーブルには主キーとしてこれらがなく、ACCT_ID
のテーブルにはNULL
値があります。 Dept_ID
とAcct_ID
はvarcharです。
ACCT_ID
がNULL
ではない場所でこの変換を試したところ、機能しましたが、機能させたいテーブルでは機能しませんでした。
これが私が得るエラーメッセージです:
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行目がありません。解決策/指針を提案してください。
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