請問在Create Table 時,使用了INT 當 主鍵(Primary Key)也會自動+1
INSERT 時,不用給DB 會自動給
那請問 ,int 範圍是-2147483648~2147483647
當超過2147483647 時,會怎樣? 無法INSERT還是?
若是這樣的狀況,該如何處理?
CREATE TABLE EMP_INFO (
[ID] [int] IDENTITY(1,1) NOT NULL,
[EMP_ID] [char](12) NOT NULL
CONSTRAINT [PK_SLITTING_HEADER_WM_RECORD] PRIMARY KEY CLUSTERED
([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
那請問 ,int 範圍是-2147483648~2147483647
當超過2147483647 時,會怎樣? 無法INSERT還是?
答:無法insert。會出現overflow error
超出規定的最大值。
若是這樣的狀況,該如何處理?
答:最簡單方式,改為 bigint
Type。
ALTER TABLE 你的表格 ALTER COLUMN 你的表格PK欄位 bigint;
修改後就可以繼續新增資料,如圖片:
測試Script:
--建立測試資料
CREATE TABLE [TestTable](
[id] [int] IDENTITY(2147483649,1) NOT NULL,
[value] [nchar](10) NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];
insert into [TestTable] ([value]) values ('test'); --失敗因為超過int最大值,overflow error
--修改欄位類行為bigint
ALTER TABLE TestTable ALTER COLUMN id bigint;
--
insert into [TestTable] ([value]) values ('test'); --成功新增
大概又會問達到9223372036854775807該怎麼辦...XD
9223372036854775807 + 1
資料類型 bigint 時發生算術溢位錯誤。
達到9223372036854775807該怎麼辦...XD
假如真的資料量大到bigint都不行 XD
麻煩把之前index某一個值之前資料搬到其他表格,使用DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
將自增值歸0。
你可以用BIGINT或是直接採UUID的方式作為主鍵
然後我講結論:會插入失敗
https://stackoverflow.com/questions/2295731/maximum-for-autoincremental-int-primary-key-in-sqlserver