現在勤めている会社のシステムでは, 採番テーブルが採用されている.
しかし, とある(自分とは全く関係ない)プロジェクトでシークエンスオブジェクトに切り替えることになった.
ですが, 考慮不足?によりバージョンアップ時に実際のテーブルのIDよりシークエンスの値が小さくなってしまい, プログラム(実際はスレッド)を動かすと主キーの重複エラーが起こるように...
それがは12月24日のこと...
そのデータメンテナンスを本日行おうとした際に, とあるテーブルの最大値をシークエンスの値として設定したかったのですが, 思ったより躓いたので記録する.
ストアドプロシージャを利用する.
DECLARE @resetSQL nvarchar(255) = 'ALTER SEQUENCE [シークエンス名] RESTART WITH ' + (SELECT CAST(MAX([列名]) + 1 as nvarchar(10)) FROM [シート名]);
exec sp_executesql @resetSQL
1時間ほど, ALTER SEQUENCEでサブクエリ?を実行する方法を調べたのですが, 見つかりません...
その際に見つけたのがここら辺の記事!
How to reset postgres' primary key sequence when it falls out of sync?
Alter sequence restart with selected value...
How to reset a sequence with PostgreSQL
PostgreSQLでも僕のような悩みを抱えている人は多く, SETVALを利用して解決したという話が多くあった.
これが地獄の始まり...
早速SQL Serverで利用しようとしますが, SETVALなんてものはありません.
ここでMicrosoft SQL Serverにも同じような機能があると思い込んでしまい, 時間を無駄に使うことになってしまった...
DBに関する知識不足を痛感した一日...
もっと良い解決方法があればご教授いただけると幸い.
Twitterフォロー待ってます!