自动标识字段最大值超过状态

时间:2012-03-08 08:30:44

标签: tsql

我在一个新表中设计了一个带有int类型的标识列。该表应该每天插入超过500.000。那么如何避免身份字段超过最大值的问题? 我的示例表创建片段在

下面
CREATE TABLE IntegratorQueue(
        ID int PRIMARY KEY IDENTITY(0,1),--IDENTITY,
        RefDetailId UNIQUEIDENTIFIER NOT NULL,
        RefStartDate datetime
        )

感谢

2 个答案:

答案 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)