SQL सर्वर 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

मैं स्तब्ध हूं कि ऐसा क्यों हो रहा है। क्या कोई अन्य आदेश है जो मैं यहां याद कर रहा हूं जो मुझे स्थानीय बनाने में मदद करेगा कि यहां क्या चल रहा है?

मुझे ध्यान देना चाहिए कि यह तालिका 7 अन्य तालिकाओं वाले डेटाबेस से संबंधित है जो सभी SEQUENCEकमांड को सही ढंग से चला रहे हैं ।

यह SQL 2012 SP1 एंटरप्राइज़ संस्करण स्थापना है।

जवाबों:



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) या इसके बाद के संस्करण पर समस्या को पुन: उत्पन्न नहीं कर सकता।

मुझे इस विशेष परिदृश्य का उल्लेख करते हुए कनेक्ट आइटम या KB आलेख नहीं मिल सकता है (और बहुत सारे अन्य SEQUENCEमुद्दे हैं)। यह कहना नहीं है कि यह पूर्व-SP1 मौजूद नहीं था क्योंकि सभी फ़िक्सेस अंत में प्रलेखित नहीं हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.