2009-12-14 2 views
1

내가가끔 신원이

CREATE TABLE [dbo].[test_table] 
(
[ShoppingCartID] [int] IDENTITY(1,1) NOT NULL, 
[CartTimeoutInMinutes] [int] NOT NULL, 
[MaximumOrderLimitPerUser] [int] NOT NULL, 
[MaximumOrderLimitPerSession] [int] NOT NULL, 
CONSTRAINT [PK_test_table] PRIMARY KEY CLUSTERED 
(
[ShoppingCartID] ASC 
) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) 
ON [PRIMARY] 

GO 

때때로 신원이 작동하지 않는 다음 표를이 작동하지 않습니다, 그것은

1. 사전에 감사와 때로는 시작을 0으로 시작합니다.

+0

어떤 테스트 케이스가 생겼 @@ IDENTITY를 사용하여 테이블에서 찾고있는 것 같은데요? – RickNZ

답변

1

어떻게 데이터를 입력 하시겠습니까? 일반 INSERT을 사용하는 경우 1에서 시작해야합니다. 그러나 테이블에 대량 삽입하거나 identity-insert를 사용할 수 있습니다. 출력

create table test (
    id int not null identity(1,1), 
    name varchar(20) not null) 
set identity_insert test on 
insert test (id, name) values (0, 'abc') 
insert test (id, name) values (27, 'def') 
set identity_insert test off 
select * from test 

:

id   name 
----------- -------------------- 
0   abc 
27   def 

또는 @@IDENTITY에 관한 문제가있는 경우 모든 베팅은 꺼져 (있는 경우 : 대신 SCOPE_IDENTITY()를 사용).

가능한

0

당신은 DBCC CHECKIDENT를 사용하고 있습니까? 이것은 일부 데이터에 의해 호출 도구 (예를 들어 레드 게이트)를 비교하고 다음과 같은 동작이 있습니다

DBCC CHECKIDENT는 (TABLE_NAME이, RESEED, new_reseed_value가)

현재 ID 값이 new_reseed_value로 설정됩니다.

테이블이 만들어진 후 테이블에 행이 삽입되지 않았거나 TRUNCATE TABLE 문을 사용하여 모든 행이 제거 된 경우 DBCC CHECKIDENT를 실행 한 후 첫 번째 행에 new_reseed_value이 사용됩니다. 그렇지 않으면 삽입 된 다음 행에 new_reseed_value + 현재 증가 값이 사용됩니다.

또는 : SET IDENTITY_INSERT을 사용하고 있습니까?

이들은 당신이 (마크 제안)보다는

관련 문제