2009-04-07 22 views
31

के बजाय 0 पर शुरू होते हैं। मुझे डेटाबेस से कुछ आईडी के साथ एक अजीब स्थिति मिली है, भले ही तालिका बनाएं पहचान (1,1) हो। यह कुछ तालिकाओं के लिए है, लेकिन दूसरों के लिए नहीं। यह आज तक काम किया है।एसक्यूएल सर्वर पहचान कॉलम मान 1

मैं रीसेट करना आज़मा लिया पहचान स्तंभ:

DBCC CHECKIDENT (SyncSession, reseed, 0); 

लेकिन नए रिकॉर्ड 0. के साथ शुरू मैं सभी तालिकाओं के लिए ऐसा करने की कोशिश की है, लेकिन कुछ अभी भी 1.

से 0 और कुछ से शुरू

कोई बात नहीं? (Reseeded) पहचान मूल्य शून्य

+0

यदि आप लगातार मूल्य का शोध कर रहे हैं तो आपके डिजाइन में कुछ गड़बड़ है। और अगर यह 0 या 1 से शुरू होता है तो यह क्यों मायने रखता है?यह एक autoincrement है, इससे कोई फर्क नहीं पड़ता कि मूल्य क्या है कि यह अद्वितीय है और स्वचालित रूप से असाइन किया गया है। – HLGEM

+2

पार्टी के लिए पांच साल देर से लेकिन मेरे जैसे - ओपी सिर्फ डेटा के ज्ञात सेट के साथ विकास और परीक्षण कर रहा था। डिजाइन के साथ कुछ भी गलत नहीं है। – GeoffM

+0

@ एचएलजीईएम - यहां यह maters क्यों है। यदि आप डेटाबेस रिकॉर्ड से कोड ऑब्जेक्ट पॉप्युलेट कर रहे हैं, तो ऑब्जेक्ट 0 की "आईडी" प्रॉपर्टी के साथ आरंभ होगा। फिर यदि पॉपुलटिंग सफल है तो यह 0 के डिफ़ॉल्ट के अलावा कुछ और होगा। 0 फिर कोई रिकॉर्ड नहीं मिला या एक "नई" वस्तु। – nuander

उत्तर

41

के साथ शुरू होगा से DBCC CHECKIDENT

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 

बनाने तालिका बनाई गई थी, या सभी पंक्तियों को ट्रंकेट तालिका विवरण का उपयोग करके हटा दिया गया है, पहलाDBCC चलाने के बादपंक्ति डाली गई CHECKIDENT पहचान पहचान के रूप में new_reseed_value का उपयोग करती है। अन्यथा, अगली पंक्ति डालने वाले नए_reseed_value + वर्तमान वृद्धि मूल्य का उपयोग करता है।

तो, यह एक खाली या छिद्रित तालिका के लिए अपेक्षित है।

+0

बस एफवाईआई, डिलीट से स्टेटमेंट बाद के व्यवहार का उपयोग करेगा, "अगली पंक्ति डाली गई नई_reseed_value + वर्तमान वृद्धि मूल्य" का उपयोग करती है। –

+0

DELETE बीज रीसेट नहीं करेगा .. क्या आपका मतलब है? – gbn

+0

@ जीबीएन, यह सच है, लेकिन मैं जो संदर्भ दे रहा था वह डीबीसीसी अध्यक्ष (सिंकेशन, शोध, new_reseed_value) का उपयोग कर रहा है; एक DELETE के बाद एक तालिका के लिए एक बीज को रीसेट करने के लिए new_reseed_value ले जाएगा और इसे पहली पंक्ति के लिए वर्तमान वृद्धि मूल्य जोड़ देगा। –

2

यह तार्किक है जब से तुम बदल दिया है (मैं उन्नत सेवा के साथ SQL सर्वर एक्सप्रेस 2005 का उपयोग कर रहा)?

DBCC CHECKIDENT (SyncSession, reseed, 1) 

अपनी पहचान स्तंभ reseed जाएगा, और यदि कोई भी पंक्ति को डाला गया है, तो यह सुनिश्चित करें कि पहले नया रिकार्ड 1.

+1

नहीं, यह सही नहीं है। यदि आप इस तरह से 1 निर्दिष्ट करते हैं तो पहला मान 2 होगा! –

+0

आह, जब तक कि आप इसे खाली तालिका पर नहीं करते हैं, इस स्थिति में यह आपके द्वारा निर्दिष्ट मान लेता है। क्षमा याचना!!! –

+0

मैंने इसे खाली टेबल पर आजमाया है और अब कुछ टेबल 1 से शुरू होते हैं और कुछ 2. – Muxa

2

मुझे एक ही समस्या है, डीबी को संशोधित करने के बाद बैकअप से बहाल करना। मैं बस एक डमी रिकॉर्ड जोड़ता हूं और फिर इसे हटा देता हूं ... फिर 0 पर RESEED सेट करें। काम करने लगता है।

1

प्रयास करें इस

DECLARE @c TABLE (TanvtechId varchar(10),NewTanvtechId Varchar(10)) 
INSERT INTO @c 
SELECT TanvtechId , Row_Number() OVER (ORDER BY TanvtechId) from Tanvtech 

UPDATE G 
SET G.TanvtechId =a.NewTanvtechId 
FROM Tanvtech as G INNER JOIN @c as a ON a.TanvtechId =G.TanvtechId 
3

आप एक reseed मूल्य पार कर लेते हैं डीबी कि नए मूल्य से पहचान शुरू कर देंगे:

DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment 

आप, हालांकि एक मूल्य के पारित करने के लिए करता है, तो नहीं है आप IDENTITY(a,b) बजाय प्रयोग नहीं किया जाएगा:

DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a' 

यह आमतौर पर बेहतर अभ्यास है, के रूप में यह टा छोड़ देता है अपने प्रारंभिक निर्मित राज्य के करीब ब्ली।

-1
DBCC CHECKIDENT (Table_Name, RESEED, 0) 

यह एक तरह से Zero(0) के साथ एक id शुरू करने के लिए है, तो तालिका वाली सभी पंक्तियां हटाकर पुन: डेटा तालिका में वापस डाल दिया है।

संबंधित मुद्दे