SQLServerでオートナンバー列を新たに設定するが、
主キーの順番に自動で割り振られるだけ。
今回の主キー以外の順番(登録日時順とか)で割り振りたい場合には、向いていない。
そこで以下の方法を検討した。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
1) ワーク用テーブル「HogeA」を作成する。
※ InsDate(データ登録日時)の昇順で、番号を割り振る。
SELECT
PrimaryNo
,InsDate
,ROW_NUMBER() OVER(ORDER BY InsDate ASC) AS sequence
INTO HogeA
FROM MasterA
;
2) 「MasterA」に、デザインからオートナンバー列「sequence(BigInt)」を追加する。
※ このままでは番号は主キーの順番になるだけなので注意!
3) 「MasterA」に、オートナンバー列「sequence」のidentityを「いいえ」にする。
4) 「MasterA」と 1)で作成したテーブルをJOINさせて、再度割り当てる。
UPDATE MasterA
SET MasterA.sequence = HogeA.sequence
FROM MasterA
INNER JOIN HogeA
ON MasterA.PrimaryNo = HogeA.PrimaryNo
;
5) 「MasterA」に、オートナンバー列「sequence」のidentityを「はい」に戻す。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
途中のデータを削除しても、
INSERTする際にはきちんと次の値として採番してくれているため、
問題ないと思われる。
以上