दिलचस्प पोस्ट
एचटीएमएल फॉर्म इनपुट फ़ील्ड के लिए अक्षम = "अक्षम" और पढ़ने के लिए = "केवल पढ़ने के लिए" में क्या अंतर है? कोणीय एनजी-दोहराने की त्रुटि "एक पुनरावर्तक में डुप्लिकेट की अनुमति नहीं है।" इस कोड के प्रदर्शन में सुधार करने के लिए कैसे? एएसपी एमवीसी आईआईएस 7 में परिणाम: HTTP त्रुटि 403.14 – निषिद्ध क्या मैं सिर्फ फ्लास्क ऐप.रन () का इस्तेमाल करके एक से अधिक ग्राहकों की सेवा कर सकता हूं? एससीजेपी 6 रेगेक्स इश्यू VBA मैक्रो टाइमर शैली पर कोड को चलाने के लिए सेकंड के प्रत्येक सेट नंबर, अर्थात 120 सेकंड canvas.toDataURL () SecurityError MySQL में दो तिथियों के बीच अंतर मैं सी # में एक JSON स्ट्रिंग को एक शब्दकोश कैसे परिवर्तित कर सकता हूँ? कैसे इंटरनेट एक्सप्लोरर 8 को nth बच्चे () सीएसएस तत्व का समर्थन करने के लिए? जावा में कोई स्टैकट्रेट के साथ NullPointerException नहीं मैं PHP में लिखे गए कोड की गति कैसे माप सकता हूँ? JQuery के साथ JSON डेटा भेजें "आंतरिक एचटीएमएल + = …" बनाम "ऐपेंड चाल्ड (टीटीटीएनोड)"

हटाए जाने के बाद SQL सर्वर में ऑटोइंचर रीसेट करें

मैंने एक SQL सर्वर डेटाबेस में किसी तालिका से कुछ रिकॉर्ड हटा दिए हैं I अब आईडी 101 से 1200 तक जा रहा है। मैं फिर से रिकॉर्ड्स को हटाना चाहता हूं, लेकिन मैं चाहता हूं कि आईडी वापस 102 पर जाए। क्या ऐसा करने का एक तरीका SQL सर्वर में है?

वेब के समाधान से एकत्रित समाधान "हटाए जाने के बाद SQL सर्वर में ऑटोइंचर रीसेट करें"

1 पर शुरू करने के लिए mytable को शोध करने के लिए निम्न आदेश जारी करें:

DBCC CHECKIDENT (mytable, RESEED, 0) 

पुस्तकें ऑन लाइन (बीओएल, एसक्यूएल मदद) में इसके बारे में पढ़ें। यह भी सावधान रहें कि आपके पास जो बीज स्थापित हो रहे हैं उसके मुकाबले आपको रिकॉर्ड अधिक नहीं हैं।

 DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number) 

अगर संख्या = 0 तो अगले में डालें ऑटो वेतन वृद्धि क्षेत्र में मूल्य 1 होगा

यदि संख्या = 101 तब अगले डालने में ऑटो वेतन वृद्धि क्षेत्र में मूल्य 102 होगा

कुछ अतिरिक्त जानकारी … आपके लिए उपयोगी हो सकती है

उपर्युक्त क्वेरी में ऑटो वृद्धि number देने से पहले, आपको यह सुनिश्चित करना होगा कि आपके मौजूदा तालिका के ऑटो वृद्धि कॉलम में वह number कम होनी चाहिए।

किसी तालिका (तालिका 1) से एक स्तंभ (column_name) का अधिकतम मूल्य प्राप्त करने के लिए, आप निम्न क्वेरी का उपयोग कर सकते हैं

  SELECT MAX(column_name) FROM table1 

अर्ध बेवकूफ-सबूत:

 declare @max int; select @max = max(key) from table; dbcc checkident(table,reseed,@max) 

http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete

इसे इस्तेमाल करे:

 ALTER TABLE tablename AUTO_INCREMENT = 1 

किसी डेटाबेस में सभी तालिकाओं को हटाएं और रिसेड करें

  USE [DatabaseName] EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0 Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back -- You may ignore the errors that shows the table without Auto increment field. 

स्वीकार्य उत्तर के आधार पर, उन लोगों के लिए, जिन्होंने एक समान समस्या का सामना किया, पूर्ण स्कीमा योग्यता के साथ:

( [MyDataBase].[MySchemaName].[MyTable] ) … परिणाम एक त्रुटि में, आपको उस डीबी के संदर्भ में होना चाहिए

यही है, निम्नलिखित में त्रुटि डाली जाएगी:

 DBCC CHECKIDENT ([MyDataBase].[MySchemaName].[MyTable], RESEED, 0) 

इसके बजाय एकल उद्धरण के साथ पूरी तरह से योग्य तालिका नाम को संलग्न करें:

 DBCC CHECKIDENT ('[MyDataBase].[MySchemaName].[MyTable]', RESEED, 0) 

आप सामान्य रूप से ऐसा नहीं करना चाहते Reseed डेटा अखंडता समस्याओं को बना सकते हैं यह वास्तव में केवल विकास प्रणालियों पर उपयोग के लिए है, जहां आप सभी परीक्षण डेटा मिटा रहे हैं और शुरू करते हैं। इसका उत्पादन उत्पादन पर उपयोग नहीं किया जाना चाहिए, यदि सभी संबंधित रिकॉर्ड हटाए नहीं गए हैं (प्रत्येक तालिका जो किसी विदेशी कुंजी रिश्ते में होना चाहिए!) आप ऐसा करने में गड़बड़ बना सकते हैं और खासकर यदि आप इसका मतलब नियमित रूप से प्रत्येक हटाए जाने के बाद कर सकते हैं। यह पहचान फ़ील्ड मूल्यों में अंतराल के बारे में चिंता करने का एक बुरा विचार है।

मैं यह समझ गया। आईटी इस:

  DBCC CHECKIDENT ('tablename', RESEED, newseed) 

कई उत्तरों इस तरह से एक बयान का उपयोग करने की सलाह देते हैं:

 DBCC CHECKIDENT (mytable, RESEED, 0) 

लेकिन ओपी ने "कुछ रिकॉर्ड हटा दिए", जो कि उनमें से सभी नहीं हो सकता है, इसलिए 0 का मान हमेशा सही नहीं है एक और उत्तर का सुझाव है कि वह अधिकतम वर्तमान मूल्य और स्वचालित रूप से खोजना चाहता है, लेकिन वह मुसीबत में पड़ता है यदि टेबल में कोई अभिलेख नहीं है, और इस प्रकार अधिकतम () नल वापस करेगा। एक टिप्पणी का उपयोग बस का उपयोग करने के लिए सुझाव

 DBCC CHECKIDENT (mytable) 

मान को रीसेट करने के लिए, लेकिन एक अन्य टिप्पणी ने सही ढंग से कहा कि यह केवल तालिका में पहले से ही अधिकतम मूल्य को बढ़ाता है; यह मूल्य को कम नहीं करेगा, अगर यह तालिका में अधिकतम से अधिक पहले से ही अधिक है, जो कि ओपी क्या करना चाहता था।

एक बेहतर समाधान इन विचारों को जोड़ता है पहले चेचक ने 0 के मान को रीसेट कर दिया, और दूसरा तालिका में वर्तमान में उच्चतम मान को रीसेट करता है, यदि तालिका में रिकॉर्ड हैं:

 DBCC CHECKIDENT (mytable, RESEED, 0) DBCC CHECKIDENT (mytable) 

जैसा कि कई टिप्पणियों ने संकेत दिया है, सुनिश्चित करें कि हटाए गए अभिलेखों की ओर इशारा करते हुए अन्य तालिकाओं में कोई विदेशी कुंजी नहीं है। अन्यथा उन विदेशी कुंजियां आपके द्वारा रिकॉर्ड किए जाने वाले रिकॉर्डों पर इंगित करेंगी, जो कि लगभग आपके पास क्या था,

मैं इस उत्तर को जोड़ना चाहता हूं क्योंकि DBCC CHECKIDENT जांचकर्ता, तालमेल के लिए स्कीमा का प्रयोग करते समय संपर्क की समस्या पैदा करेगा। यह सुनिश्चित करने के लिए इसका प्रयोग करें:

 DECLARE @Table AS NVARCHAR(500) = 'myschema.mytable'; DBCC CHECKIDENT (@Table, RESEED, 0); 

यदि आप ऑपरेशन की सफलता की जांच करना चाहते हैं, तो उपयोग करें

 SELECT IDENT_CURRENT(@Table); 

जो ऊपर दिए गए उदाहरण में आउटपुट 0 चाहिए।