在SQL Server上:它取決於RID列的類型。該內部身份可以增加,但將無法分配給stoarge列:
CREATE TABLE [t1] (
[tid] int IDENTITY (2147483647, 1) NOT NULL
, name varchar(1)
) ON [PRIMARY]
GO
insert into t1(name) values('1')
insert into t1(name) values('1')
這會觸發錯誤:
Msg 8115, Level 16, State 1, Line 2
Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred.
但有足夠的存儲數字列將遞增就好:
CREATE TABLE [t1] (
[tid] numeric(38,0) IDENTITY (2147483647, 1) NOT NULL
, name varchar(1)
) ON [PRIMARY]
GO
insert into t1(name) values('1')
insert into t1(name) values('1')
同樣一個bigint將會過度生成2 ^^ 63-1:
CREATE TABLE [t1] (
[tid] bigint IDENTITY (9223372036854775807, 1) NOT NULL
, name varchar(1)
) ON [PRIMARY]
GO
insert into t1(name) values('1')
insert into t1(name) values('1')
,但有足夠的存儲數字列會成功:
CREATE TABLE [t1] (
[tid] numeric(38,0) IDENTITY (9223372036854775807, 1) NOT NULL
, name varchar(1)
) ON [PRIMARY]
GO
insert into t1(name) values('1')
insert into t1(name) values('1')
是的,32位自動增量值會溢出。 http://stackoverflow.com/questions/261815/upper-limit-for-autoincrement-primary-key-in-sql-server – jball 2009-12-29 21:17:40
你將無法在你的整個生活中溢出64位數字,它只是太大。 – 2009-12-29 21:26:02
在我一生中?還是在大約10年?當數據庫充滿非常關鍵的數據時,我絕對不會想要在10年內修復這個bug – Earlz 2009-12-29 21:29:01