2012-03-08 2 views
1

int 형식의 ID 열이있는 새 테이블을 디자인하고 있습니다.이 테이블에는 매일 500.000 개 이상의 삽입이 있어야합니다. 어떻게 최대 값을 초과하는 ID 필드의 문제를 피할 수 있습니까? 더 후 2^31-1를 기대하는 경우 조각을 만들어 내 샘플 테이블이자동 식별 필드의 최대 값이 상태를 초과합니다

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

감사

답변

1

당신이 BIGINT를 사용하려는 해달라고하면 당신은 PK로 테이블에 GUID (고유 식별자)를 사용할 수 있습니다. GUID의 최대 용량은 2^128입니다.

CREATE TABLE IntegratorQueue(
     ID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),--IDENTITY, 
     RefDetailId UNIQUEIDENTIFIER NOT NULL, 
     RefStartDate datetime 
     ) 

INT ID가 최대 값을 초과하는시기를 알아야 할 경우 삽입 전에 확인해야합니다.

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 + 삽입) 그것은 또한 초과 될 수

+0

예 DBCC CHECKIDENT는 ID 처리가 UI에서 사용되기 때문에 이것을 처리하는 데 더욱 익숙합니다. – dankyy1

2

이하입니다. 그럼 당신은 그 BIGINT을 사용할 수 2^63-1

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

그래서 어느 날 ... 난 정체성이 최대 값을 초과 처리하는 방법 답변을 찾기 위해 초점을 맞추고 있어요 .. – dankyy1

+2

@ dankyy1 : 테이블에 몇 번째에 넣을 계획입니까? 'int' (2^31-1 = 2,147,483,647) 또는'bigint' (2^63-1 = 9,223,372,036854775807)가 초과 될 때까지 기다려야하는 시간을 계산할 수 있습니다. – Oleg

+0

하루에 1 백만 개의 레코드를 삽입하더라도 BIGINT의 제한을 초과하는 데는 250 억년이 걸릴 것입니다. 이러한 종류의 미래 교정은 거의 필요하지 않습니다. – GarethD

관련 문제