ID列に定義された主キーがあるため、この列を直接変更することはできません。
質問で述べた両方のアプローチを使用でき、ダウンタイムはサーバーのパフォーマンスとそのテーブル内の行数に依存します。
- PKをドロップして列を変更します。または
最初にPKをドロップします
/****** Object: DROP Index [PK_DatabaseLog_DatabaseLogID]******/
ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [PK_TableName_ID]
GO
列を変更
ALTER TABLE [dbo].[TableName] ALTER COLUMN [dbo.ID] BIGINT
主キーを追加
/****** Object: ADD Index [PK_DatabaseLog_DatabaseLogID]******/
ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [PK_TableName_ID] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
このアプローチは通常、それほど時間はかかりません。私の環境では、500万行を超える大きなテーブルで数秒かかります。
- 説明されているように、copy-drop-renameメソッド
このアプローチも使用できます。ただし、このアプローチでは、テーブルを同期する必要があるため、アプローチ1よりも多くのダウンタイムが必要です。