SQL Server 2012 sırasını sıfırlama


13

SEQUENCENesneyi kullanan belirli bir tabloyu test etme ve doldurma sürecindeyim . Bu süreçte, tabloyu on binlerce ekleme satırı ile doldurmayı test ediyorum (bunu nasıl programlayacağımı bilmiyorum). Bu özel tablo ile gördüğüm sorun, başka bir nüfus testi başlattığınızda SEQUENCE, ilk istediğim numaraya (ki 1) sıfırlamıyor olmasıdır.

Yeni bir testi yeniden çalıştırmak istediğimde söz konusu tabloyu silip aşağıdakileri çalıştırıyorum:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

Ben istediğinizde aşağıdaki çalıştırmak testi yeniden çalıştırın SCHEMA& SEQUENCEsiparişinin altında pişirilir komutları:

CREATE SCHEMA foo;
GO

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

GO

Sonra tablo oluşturmak:

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

Bu tamamlandıktan sonra aşağıdaki ekleme komutunu 50.000 kez çalıştırıyorum:

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'
)

Şimdi tabloya giren verilerde kesinlikle bir sorun yok. Karşılaştığım zorluk, tabloyu sildiğimde, şemayı ve diziyi bıraktıktan sonra tabloyu, diziyi ve şemayı yeniden oluşturmak SEQUENCE, önceki veritabanı enkarnasyonundaki son sayıdan seçip bire sıfırlamaması.

Örneğin, dizideki son sayı 634,534 ise, yeni tablodaki bir sonraki dizi numarası 634,535'tir.

Tabloyu sildikten ve şema ve diziyi bıraktıktan sonra, dizinin ve şemanın kaldırıldığını doğrulamak için aşağıdakileri çalıştırıyorum:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

Bunun neden gerçekleştiğine şaşırıyorum. Burada eksik olan başka bir komut var mı?

Bu tablo tüm SEQUENCEkomutu doğru çalışan 7 tablo ile bir veritabanına ait olduğunu not etmeliyim .

Bu bir SQL 2012 SP1 Enterprise Edition yüklemesidir.

Yanıtlar:



5

Komut dosyanızı birkaç küçük değişiklikle kullanma:

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;

... Sorunu SQL Server 2012 SP1'de (derleme 3000) veya üzerinde yeniden oluşturamıyorum.

Bu özel senaryodan söz eden bir Connect öğesi veya KB makalesi de bulamıyorum (ve diğer birçok SEQUENCEsorun var). Bu, SP1 öncesi mevcut olmadığı anlamına gelmez, çünkü tüm düzeltmeler belgelenmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.