Invoiceテーブルの各レコードがYYYYNNNNNNのようなIDを持つというビジネス要件があります。
NNNNNN部分は、毎年初めに再始動する必要があります。したがって、2016年に入力された最初の行は2016000001のようになり、2番目は2016000002のようになります。2016の最後のレコードが2016123456だったとします。(2017の)次の行は2017000001のようになります。
このIDを主キーにする必要はなく、作成日も保存します。アイデアは、この「表示ID」は一意であり(それでクエリできるため)、年ごとに人間でグループ化できるということです。
レコードが削除されることはほとんどありません。しかし、私はそのようなものに対して防御的にコーディングする傾向があります。
今年、新しい行を挿入するたびに最大IDを照会しなくても、このIDを作成できる方法はありますか?
アイデア:
- その年
CreateNewInvoiceSP
のMAX
値を取得するA (yucky) - これを正確に行うためのいくつかの魔法の組み込み機能(私は夢を見ることができます)
IDENTITY
orDEFAULT
宣言でUDFまたは何かを指定できること(??)- を使用するビュー
PARTITION OVER + ROW()
(削除すると問題が発生します) - トリガー
INSERT
(まだMAX
クエリを実行する必要があります:() - 毎年のバックグラウンドジョブで、毎年挿入されるMAXを使用してテーブルを更新しました。
これらはすべて、理想的ではありません。どんなアイデアやバリエーションでも大歓迎です!