ラベル オートナンバー の投稿を表示しています。 すべての投稿を表示
ラベル オートナンバー の投稿を表示しています。 すべての投稿を表示

2014年12月2日火曜日

既存テーブルのオートナンバーの割り振り方(主キー以外をキーにする場合)

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する際にはきちんと次の値として採番してくれているため、
問題ないと思われる。


以上