Sql-Server

將標識列從 INT 更改為 BIGINT

  • December 27, 2016

我有一個表,其中的標識列也是主鍵。目前,它有 5000 萬行,標識列的最高值為 148,921,803。該表有很多DELETEs 並INSERTS在其上執行,因此價值很高。

我們希望將數據類型從 更改INTBIGINT以準備添加更多行。請注意,沒有對 PK 列的引用。

以最少的停機時間來做到這一點的最佳方法是什麼?我有兩個選擇。

  1. 刪除PK並更改列;或者
  2. 複製刪除重命名方法,如此所述:

由於在標識列上定義了一個主鍵,您將無法直接更改此列。

您在問題中提到的兩種方法都可以使用,停機時間取決於您的伺服器的執行方式以及該表中駐留的行數。

  1. 刪除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 萬行的大表上需要幾秒鐘的時間。

  1. 複製刪除重命名方法,如所述

您也可以使用這種方法。但是,對於這種方法,您需要比方法一更多的停機時間,因為您必須同步表。

引用自:https://dba.stackexchange.com/questions/159229