副次問い合わせ結果でテーブルを更新する
受験勉強システム受験勉強システムの各テーブルのID列(プライマリー)が突如1000番台に飛んでしまった。データはまだ200件くらいしかないのに。プログラム側のバグだと思うが、リカバリすることに。ID列なので、Identityをいったんオフにして、新旧対照表(テーブル「変換」)を作成し、それとJOINしてリカバリしていきます。久しぶりに副次問い合わせでのテーブル更新をやろうとして思い出せなかったのでメモしておきます。
ID列のIdentityを「いいえ」にしてから、下記SQLを実行。
変換用新旧対応表テーブル作成。中身のデータはEXCELで作成。
USE [JUKEN] GO /****** Object: Table [dbo].[変換] Script Date: 2017/04/13 23:56:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[変換]( [旧ID] [int] NULL, [新ID] [int] NULL ) ON [PRIMARY] GO
バイナリを格納するテーブルのリカバリ
USE [JUKEN] GO UPDATE [dbo].[バイナリ] SET [バイナリID] = B.新ID FROM [dbo].[バイナリ] as A INNER JOIN ( SELECT [旧ID] ,[新ID] FROM [dbo].[変換] ) as B on A.[バイナリID] = B.旧ID GO
これ以外にも関連性のあるカラムや他のテーブルもアップデート。
コメント
コメントを投稿