我在一个新表中设计了一个带有int类型的标识列。该表应该每天插入超过500.000。那么如何避免身份字段超过最大值的问题? 我的示例表创建片段在
下面CREATE TABLE IntegratorQueue(
ID int PRIMARY KEY IDENTITY(0,1),--IDENTITY,
RefDetailId UNIQUEIDENTIFIER NOT NULL,
RefStartDate datetime
)
感谢
答案 0 :(得分:2)
如果您期望超过2 ^ 31-1。然后你可以使用BIGINT
即2 ^ 63-1
CREATE TABLE IntegratorQueue(
ID BIGINT PRIMARY KEY IDENTITY(0,1),--IDENTITY,
RefDetailId UNIQUEIDENTIFIER NOT NULL,
RefStartDate datetime
)
答案 1 :(得分:1)
如果您不想使用BIGINT,可以在表中使用GUID(UNIQUEIDENTIFIER)作为PK。 GUID的最大容量为2 ^ 128。
CREATE TABLE IntegratorQueue(
ID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),--IDENTITY,
RefDetailId UNIQUEIDENTIFIER NOT NULL,
RefStartDate datetime
)
但是如果您需要知道您的INT身份何时超过最大值,您应该在插入之前检查。
INSERT INTO IntegratorQueue( RefDetailId, RefStartDate )
VALUES ( NEWID(), GETUTCDATE() )
-- INT capacity (-2,147,483,648) to (2,147,483,647 )
IF 2147483647 - SCOPE_IDENTITY() < 500000
--... Do something... send an Email ( xp_sendmail. http://msdn.microsoft.com/en-us/library/aa260697(v=sql.80).aspx )
-- Insert Notification records into an another table...
-- return with 1, or something else, like the end of your query instead of RETURN 0 RETURN 1 and check this... so on...
可能是DBCC CHECKIDENT(tablename,RESEED,currentseed + inserted)