2008-09-29 12 views
30

मेरे पास एक टी-एसक्यूएल तालिका चर (तालिका नहीं है) जिसमें ऑटो वृद्धिशील पहचान कॉलम है। मैं इस चर से सभी डेटा साफ़ करना चाहता हूं और पहचान कॉलम मान को 1 तक रीसेट करना चाहता हूं। यह कैसे किया जा सकता है?मैं टी-एसक्यूएल टेबल चर में एक पहचान कॉलम का शोध कैसे कर सकता हूं?

उत्तर

33

आप एक तालिका चर का उपयोग कर रहे हैं, तो आप यह नहीं कर सकते। यदि यह एक टेबल था, तो आप इसे छोटा कर सकते हैं या DBCC CHECKIDENT का उपयोग कर सकते हैं। लेकिन, यदि आप में तालिका चर का उपयोग करने के लिए हैं, तो आपको पहचान कॉलम के अलावा कुछ और उपयोग करना होगा। या, और अधिक सही, अपनी तालिका चर लेकिन उत्पादन ROWNUMBER का उपयोग करने में पहचान स्तंभ का उपयोग करें:

DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50)) 
INSERT INTO @t (somevalue) VALUES('one') 
INSERT INTO @t (somevalue) VALUES('twp') 
INSERT INTO @t (somevalue) VALUES('three') 
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t 
DELETE FROM @t 
INSERT INTO @t (somevalue) VALUES('four') 
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t 

यह सबसे अच्छा आप तालिका चर के साथ क्या कर सकते हैं।

35

तालिका को छूने से सभी डेटा डंप हो जाएगा, और पहचान बीज को रीसेट कर दिया जाएगा।

अन्यथा, आप डेटा के किसी भी बनाए रखते हुए पहचान रीसेट करने के लिए इस कॉल का उपयोग कर सकते हैं:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue) 
+1

कूल, मुझे उस डीबीसीसी कमांड के बारे में कभी नहीं पता था। धन्यवाद! –

+15

कोई तालिका चर को छोटा नहीं कर सकता है, न ही कोई तालिका चर पर डीबीसीसी जांच का उपयोग कर सकता है। – AndrewJacksonZA

+8

-1 प्रश्न विशेष रूप से तालिका चर के बारे में था। जैसा कि उपरोक्त टिप्पणी में दर्शाया गया है, इस उत्तर में कुछ भी इनके लिए उपयोग नहीं किया जा सकता है। –

-3

यदि आपको थोड़ी देर के लूप के प्रत्येक मोड़ में तालिका चर को छोटा करने की आवश्यकता है, तो आप लूप में declare @myTbl (...) कथन डाल सकते हैं। यह तालिका को फिर से बनाएगा और लूप के प्रत्येक मोड़ पर पहचान कॉलम रीसेट करेगा। हालांकि, यह एक भारी प्रदर्शन हिट है। मेरे पास काफी तंग लूप था, और delete @myTbl के सापेक्ष टेबल वैरिएबल को फिर से शुरू करना कई बार धीमा था।

  • दान
+2

नहीं। यह काम नहीं करता है। –

0
declare @tb table (recid int,lineof int identity(1,1)) 

    insert into @tb(recid) 
    select recid from tabledata 

    delete from @tb where lineof>(select min(lineof) from @tb)[email protected] 

मैं इस किया था जब मैं जब एसक्यूएल 2000 का उपयोग कर मूल रूप से, आप रिकॉर्ड में जोड़ने और फिर कम से कम एक को देखने के एक टॉप और एक चर का उपयोग करना चाहता था। मुझे एक ही समस्या थी और इस धागे को देखा। तालिका को हटाने से बीज को रीसेट नहीं किया जाता है, हालांकि मुझे लगता है कि गो का उपयोग करके बीज को रीसेट करने के लिए तालिका और चर को छोड़ना चाहिए।

@ ऊपर दिए गए प्रश्न में @axaxit क्वेरी के शीर्ष 900 प्राप्त करना था और चूंकि टेबल वैरिएबल की एक अलग प्रारंभिक पहचान कुंजी होगी, इससे यह समस्या हल हो जाएगी।

किसी भी बाद में क्वेरी, यह के रूप में "1" सम्मिलित करने के लिए आदि

आशा है कि यह मदद करता है कि व्युत्पन्न प्रक्रिया घटाना कर सकते हैं।

लॉरेन

0

मैं तुम्हें दो तालिका चर का उपयोग सुझाव देते हैं। @ टेबल 1 के पहले कॉलम पर पहचान बीज है। @ टेबल 2 में पहला कॉलम है लेकिन इसमें कोई पहचान बीज नहीं है।

आप अपनी प्रक्रिया के माध्यम से पाश,

Insert into @Table2 from @Table1 

तो दोनों तालिकाओं से हटाएँ के रूप में अपने प्रक्रिया लूप्स के रूप में।

अपना पहला पास पर, @ तालिका 2 पहली पंक्ति में आ अनुक्रमिक नंबर होगा 1.

लूप के माध्यम से दूसरी बार से शुरू अपने दूसरे टेबल पर शुरू पहले कॉलम में अनुक्रमिक संख्या हो सकता है कहते हैं 1081 ।लेकिन अगर आप एक चर

(Select @FixSeed = min(RowID) From @Table2) 

करने के लिए न्यूनतम मूल्य का चयन तो फिर तुम @ तालिका 2 अद्यतन कर सकते हैं RowID 1 से शुरू इस प्रकार बनाने के लिए:

Update @Table2 Set RowID = RowID - @FixSeed +1 

आशा इस मदद करता है

0

आप हटा दिया है एक तालिका में सभी पंक्तियां, और आप पहचान कॉलम मान को रीसेट करना चाहते हैं।

यूएसबी डीबीसीसी अध्यक्ष कमांड।

DBCC CHECKIDENT(tblPerson, RESEED, 0) 

यह आदेश व्यक्ति पहचान पहचान कॉलम को रीसेट कर देगा।

ध्यान देने योग्य एक और बात यह है कि यदि आप पूर्ण पथ से संदर्भित कर रहे हैं, या यदि आपके तालिका के नाम में रिक्त स्थान हैं तो आपको एकल कोट या स्क्वायर ब्रैकेट में तालिका का नाम संलग्न करने की आवश्यकता हो सकती है।

DBCC CHECKIDENT (‘databasename.dbo.orders’,RESEED, 0) 
संबंधित मुद्दे