IDENTITY標識列為int類型,取值范圍為-2^32到2^31-1。當增長值超過這個最大值時,我在SQL Server 2008 R2 x64上試驗的結果是:
將 IDENTITY 轉換為數據類型 int 時出現算術溢出錯誤。
- 一般解決方案:
1,)如果該column為主鍵,則刪除主鍵:
alter table [tablename] drop [pkname];
2,)修改該column的數據類型為bigint:
alter table [tablename] alter column [column name] bigint;
這種方案的操作步驟:
- )將[tablename] 表中的記錄插入到臨時表,
- )之后清掉[tablename] 中的記錄,
- )修改[column name] 的數據類型,
- ) 從臨時表中的記錄插回表[tablename],釋放臨時表。
這種方案會產生大量日志。
- 手動處理方案:
- )自己新建一種表[tablename_new] ,設定[column name] bigint
- )將[tablename]中的記錄插入到表[tablename_new];
- )刪除表[tablename],修改表[tablename_new]名稱為[tablename]。
備注:
int、bigint、smallint 和 tinyint
使用整數數據的精確數字數據類型。
bigint
從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小為 8 個字節。
int
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數據(所有數字)。存儲大小為 4 個字節。int 的 SQL-92 同義字為 integer。
smallint
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數據。存儲大小為 2 個字節。
tinyint
從 0 到 255 的整型數據。存儲大小為 1 字節。
注釋
在支持整數值的地方支持 bigint 數據類型。但是,bigint 用於某些特殊的情況,當整數值超過 int 數據類型支持的范圍時,就可以采用 bigint。在 SQL Server 中,int 數據類型是主要的整數數據類型。
在數據類型優先次序表中,bigint 位於 smallmoney 和 int 之間。
只有當參數表達式是 bigint 數據類型時,函數才返回 bigint。SQL Server 不會自動將其它整數數據類型(tinyint、smallint 和 int)提升為 bigint。