原因
削除や更新の対象レコードを特定できない場合にこのエラーが発生します。
例えば、主キーが設定されていない、または、日付型(datetime型など)を主キーに設定しいる場合などに発生します。
Forguncyでは、リンクテーブルに主キーがない場合、テーブルの最初のフィールドを主キーとして扱います。 このため、そのフィールドに重複した値が存在すると処理の対象レコードを特定できなくなります。
また、日付型の場合、データベースによって日付時刻型は、表現形式や、分解能(秒単位、ミリ秒単位、マイクロ秒単位…)から内部の持ち方まで独自の精度で扱うため、Forguncy側のリンクテーブルに取得できた値にずれが生じ対象レコードを特定できなくなります。
(例)
SQL Server側(datetime):2019-01-14 11:22:33.443 というレコードをリンクテーブルで接続すると、 Forguncy側(日付/時刻):2019/01/14 11:22:33 といった値になり、最後の「443」が抜け落ちます。
抜け落ちたことで、重複する値が発生すると、このエラーが発生します。
対策
リンクテーブルの更新・削除を行うには、外部テーブル側が以下の条件のいずれかに該当している必要があります。 リンクテーブルで接続したテーブル側(SQL ServerやOracle側のテーブル側)が以下のいずれかを満たすようにしてください。
- 主キーが設定された列がある(日付型(datetime型など)は主キーに使用できません)
- Nullを許容しない一意な列がある(ユニークキーに該当)
- IDENTITY列がある