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する際にはきちんと次の値として採番してくれているため、
問題ないと思われる。
以上
2014年12月2日火曜日
2014年12月1日月曜日
SQLServerのDumpが復元できない!?
> 復元さき
SQLServer2005
> 復元もと
SQLServer2014
・・・という状況で復元しようとしたら、
「メディア ファミリが正しい形式ではありません。」
という見慣れないエラーメッセージが発生した。
はじめはデータが壊れているのかと思った。
しかし調査した結果、そうではない。
「下位バージョンでは、バックアップファイルをリストアできません。」
との情報があり。
解決策はスクリプトにデータを出力するとか。
4GBを超えており、どう考えてもお手軽ではない・・・・。
どうしても必要というわけではないため、諦めることにした。
(参考)
http://nusoft.jp/blog/archives/118
登録:
投稿 (Atom)