同じデータベース内のポリゴンレイヤー(12桁の流域識別子)から派生した属性を使用して、ポイントレイヤーの属性を挿入または更新しようとしています。つまり、これはSpatiaLite(SQLiteの空間拡張)を使用していますが、これは詳細であり、これは単にSQLの問題であるはずです。
そこで、以下の2つのトリガーを作成しました。アクションのUPDATED_ON
タイムスタンプを設定する部分はうまく機能します。ただし、添付の例に示すように、空間パーツは、ポイントが発生する場所に関係なく、常に同じ値を割り当てます。1つの行からの入力で、すべての行に対して同じテストを実行しているようですが、間違った行に適用されています。したがって、トリガーのSQL内の何かが、操作を実行するために間違ったポイントを取得している必要があります。それはそのnew.rowid
一部ですか?
CREATE TRIGGER INSERT_UDT_HUC12 AFTER INSERT ON mypoints
BEGIN
UPDATE mypoints SET UPDATED_ON = DATETIME('NOW') WHERE rowid = new.rowid;
UPDATE mypoints SET WBD_HUC12 =
(SELECT HUC_12 FROM cumberland_huc12, mypoints
WHERE st_intersects(mypoints.Geometry, cumberland_huc12.Geometry))
WHERE mypoints.rowid = new.rowid;
END;
CREATE TRIGGER UPDATE_UDT_HUC12 AFTER UPDATE ON mypoints
BEGIN
UPDATE mypoints SET UPDATED_ON = DATETIME('NOW') WHERE rowid = new.rowid;
UPDATE mypoints SET WBD_HUC12 =
(SELECT HUC_12 FROM cumberland_huc12, mypoints
WHERE st_intersects(mypoints.Geometry, cumberland_huc12.Geometry))
WHERE mypoints.rowid = new.rowid;
END