Максимальное значение поля автоматической идентификации превышает статус - PullRequest
1 голос
/ 08 марта 2012

Я оформляю новую таблицу, в которой есть столбец идентификаторов с типом int. Предполагается, что таблица должна содержать не более 500 000 записей в день.мой пример таблицы создания фрагмента ниже

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

спасибо

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Если вы ожидаете больше, чем 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 голос
/ 08 марта 2012

Вы можете использовать GUID (UNIQUEIDENTIFIER) в своей таблице как PK, если вы не хотите использовать BIGINT. Максимальная емкость 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...

Может быть, CHCCKIDENT DBCC (имя таблицы, RESEED, текущее семя + вставлено)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...