SQL Server 2012 시퀀스 재설정


13

SEQUENCE개체 를 활용하는 특정 테이블을 테스트하고 채우는 과정에 있습니다. 이 과정에서 나는 수만 개의 삽입 라인으로 테이블을 채우는 것을 테스트하고 있습니다 (프로그래밍 방법에 익숙하지 않기 때문에). 이 특정 표에서 볼 수있는 문제는 다른 모집단 테스트를 시작할 때 SEQUENCE원하는 첫 번째 숫자 (1)로 다시 설정되지 않는다는 것입니다.

새 테스트를 다시 실행하려면 해당 테이블을 삭제 한 후 다음을 실행하십시오.

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

테스트를 다시 실행하려면 다음 순서대로 실행되는 다음 SCHEMA& SEQUENCE명령을 실행하십시오 .

CREATE SCHEMA foo;
GO

CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;

GO

그런 다음 테이블을 만듭니다.

CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)

GO

그것이 완료되면 다음 삽입 명령을 50,000 번 실행합니다.

INSERT INTO [foo].[sample_table_with_data] 
(
    [order_number],
    [sample_column_one], 
    [sample_column_two], 
    [sample_column_three]
) 
VALUES 
(
    NEXT VALUE FOR foo.fee, 
    'Blah', 
    'Blah Blah', 
    'Blah Blah Blah'
)

이제 데이터가 테이블에 입력되는 데 전혀 문제가 없습니다. 내가 겪고있는 과제는 테이블을 삭제하고 스키마와 시퀀스를 삭제 한 다음 테이블, 시퀀스 및 스키마를 다시 만들어 SEQUENCE이전 데이터베이스 화신의 마지막 숫자에서 선택하고 다시 재설정하지 않는 것입니다.

예를 들어, 시퀀스의 마지막 번호가 634,534이면 새 테이블의 다음 시퀀스 번호는 634,535입니다.

테이블을 삭제하고 스키마와 시퀀스를 삭제 한 후 다음을 실행하여 시퀀스와 스키마가 제거되었는지 확인합니다.

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

왜 이런 일이 일어나고 있는지 잘 모르겠습니다. 여기서 누락 된 또 다른 명령이 있습니까? 여기에서 정확히 무슨 일이 일어나고 있는지 현지화하는 데 도움이됩니까?

이 테이블은 SEQUENCE명령을 올바르게 실행하는 7 개의 다른 테이블이있는 데이터베이스에 속합니다 .

이것은 SQL 2012 SP1 Enterprise Edition 설치입니다.

답변:



5

약간의 변경으로 스크립트 사용하기 :

CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)
GO
SET NOCOUNT ON
GO
INSERT INTO [foo].[sample_table_with_data]
    ([order_number],[sample_column_one],[sample_column_two],[sample_column_three]) 
VALUES
    (NEXT VALUE FOR foo.fee,'Blah','Blah Blah','Blah Blah Blah')
GO 50000
SELECT
    MIN(order_number), 
    MAX(order_number)
FROM foo.sample_table_with_data AS stwd
GO
DROP SEQUENCE foo.fee;
GO
DROP TABLE foo.sample_table_with_data
GO
DROP SCHEMA foo;

... SQL Server 2012 SP1 (빌드 3000) 이상에서는 문제를 재현 할 수 없습니다.

이 특정 시나리오를 언급하는 Connect 항목 또는 KB 기사를 찾을 수 없습니다 (다른 SEQUENCE문제 가 많이 있습니다). 모든 수정 프로그램이 문서화되지는 않았기 때문에 SP1 이전에는 존재하지 않았다고 말할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.