SQL Serverデータベースでトリガーをパズルしようとしています。私は夏のプロジェクトに取り組んでいる学生ですので、私はこれでプロですが簡単にそれを学ぶことができます。TSQLトリガを使用してインクリメンタルオーダーの整合性を維持する
これは、ランクによってソート私のデータベーステーブルの簡易版です。今の私のための客観的
ID主キー
ID | RANK
--------------
2 | NULL
1 | 1
3 | 2
4 | 3
7 | 4
として/削除/挿入する機能を持つことですランクを更新し、データベース内のランクの増分順を、重複なしで使用可能な位置に番号がなくても維持する。
/* Insert new row */
INSERT INTO TABLE (ID, RANK) VALUES (6, 4)
/* AFTER INSERT */
ID | RANK
--------------
2 | NULL
1 | 1
3 | 2
4 | 3
6 | 4 <- new
7 | 5 <- notice how the rank increased to make room for the new row
私はトリガーでこれを行うことが最も効率的な/最も簡単な方法だと思います。私は間違っているかもしれませんが。
トリガーの代わりに、ランクが変更されたときにフロントエンドコードを使用して各行の更新を実行する一時的なソリューションを作成しました。
トリガーがこれを行う方法や方法を知っていれば、この情報を共有してください。
EDIT:追加されたシナリオ 挿入されるランクは、常に割り当てられた数になります。挿入されているものと同じかそれ以上のものはすべて増えます。
トリガーの原因となるランクは、常にその番号を要求する優先順位を持ちますが、それ以外のものはランクを上げて対応します。
ランクが最も高い数値の場合、トリガーはその数値が最大値の+1であることを確認します。
これは増加します。 IDはちょうど順番どおりに起こりますか?インサートが(2,5)だったら? – Paparazzi
これはテーブルのパフォーマンスに影響します。 –
RANK列を計算列にしてみてください –