副次問い合わせ結果でテーブルを更新する

受験勉強システム受験勉強システムの各テーブルのID列(プライマリー)が突如1000番台に飛んでしまった。データはまだ200件くらいしかないのに。プログラム側のバグだと思うが、リカバリすることに。ID列なので、Identityをいったんオフにして、新旧対照表(テーブル「変換」)を作成し、それとJOINしてリカバリしていきます。久しぶりに副次問い合わせでのテーブル更新をやろうとして思い出せなかったのでメモしておきます。

ID列のIdentityを「いいえ」にしてから、下記SQLを実行。

2017-04-13[2]

 

変換用新旧対応表テーブル作成。中身のデータは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

 

これ以外にも関連性のあるカラムや他のテーブルもアップデート。

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける