更新ステートメントが 2 つあります。どちらも似ていますが、異なるテーブル セットで動作します。1つは機能しますが、もう1つは機能しません。理由はわかりません。
UPLOAD というテーブルがあります。これには、別のデータ システムからの解析結果が含まれます。
- VendorText (nVarChar(50))
- ベンダーID (BigInt)
- ModelText (nVarChar(50)
- モデル ID (BigInt)
- UnitText (nVarChar(50))
- ユニット ID (BigInt)
- SubUnitText (nVarChar(50))
- SubUnitID (BigInt)
最初に、4 つのテキスト フィールドが解析から入力されます。
情報を引き出すテーブルは 4 つあります。
- ベンダーテーブル
- モデル テーブル
- 単位表
- サブユニット テーブル
モデル テーブルには、ベンダー テーブルにリンクする整数フィールドがあります。
サブユニット テーブルには、それをユニット テーブルにリンクする整数フィールドがあります。
使用するスカラー関数は 4 つあります。
FindVendor - テキスト値を取得し、Vendor テーブルで名前を検索して、PK を返します。
FindModel - テキスト値と整数値 (
ベンダーの PK) を取ります。モデル番号の PK を返します。- FindUnit - テキスト値を受け取り、UnitTable で一致するものを検索し、ユニットの PK を返します。
- FindSubUnit - テキスト値と整数値 (UNIT の PK) を取り、SubUnit の PK を返します。
機能する更新ステートメント
UPDATE UPLOADTABLE
SET
VendorID = FindVendor(VendorText),
ModelID = FindModel(ModelText, VendorID)
これをテストしたところ、適切な結果が得られました。
ただし、これは失敗します。
UPDATE UPLOADTABLE
SET
UNITID = FindUnit(UnitText),
SubUnitID = FindSubUnit(SubUnitText, UnitID)
私が返すのは、SubUnitID のゼロだけです。
ただし、これは機能します。
UPDATE UPLOADTABLE
SET
UnitID = FindUnit(UnitText);
UPDATE UPLOADTABLE
SET
SubUnitID = FindSubUnit(SubUnitText, UnitID)
最初のものは機能し、2番目のものは失敗する理由がわかりません。モデル番号の更新が偶然に機能している場合を除きます。update ステートメントが Set ステートメントの結果をいつ書き込むかはわかりません。
何か案は?