मौजूदा तालिका में एक कॉलम जोड़ें और उन्हें एमएस SQL ​​सर्वर पर विशिष्ट रूप से नंबर दें


121

मैं एक मौजूदा विरासत डेटाबेस में एक कॉलम जोड़ना चाहता हूं और एक प्रक्रिया लिखूंगा जिसके द्वारा मैं प्रत्येक रिकॉर्ड को एक अलग मूल्य प्रदान कर सकता हूं। एक कॉलम को जोड़ने और इसके लिए डेटा को स्वचालित करने के लिए कुछ ऐसा है।

जैसे, यदि मैं "ID" (संख्या) नामक एक नया कॉलम जोड़ता हूं, तो मैं प्रत्येक रिकॉर्ड के लिए एक अद्वितीय मान आरंभ करना चाहता हूं। तो, मेरे आईडी कॉलम में रिकॉर्ड होगा 1 to 1000
मैं उसको कैसे करू?


2
यह डेटाबेस विशिष्ट होने जा रहा है। आपको यह निर्दिष्ट करना चाहिए कि आप किस डेटाबेस के साथ काम कर रहे हैं।
डवोरक सिप 20'08

1
इसका उल्लेख करने के लिए आपको अपने प्रश्न को संपादित करना चाहिए।
डवोरक

जवाबों:


221

यह डेटाबेस पर निर्भर करेगा लेकिन SQL सर्वर के लिए, इसे निम्न प्रकार से प्राप्त किया जा सकता है:

alter table Example
add NewColumn int identity(1,1)

5
इसने खूबसूरती से काम किया और मुझे उन सभी नंबरों को जोड़ा जो मुझे अपने आप चाहिए थे। धन्यवाद!
djangofan

9
यदि आपको प्रबंधन स्टूडियो गुई के साथ बदलाव करने में समस्या है, तो आप / टूल / विकल्प / डिज़ाइनर / टेबल और डेटाबेस डिसीगर के तहत सेटिंग्स बदल सकते हैं, आपको Prevent saving changes that require table re-creationउस बॉक्स को एक चेकबॉक्स अनचेक मिल जाएगा और आप एक पहचान कॉलम भी जोड़ पाएंगे। जीयूआई।
सर्फ करें

22

यदि आप SQL डेटाबेस का उपयोग कर रहे हैं, तो यह आपकी मदद करेगा। MySQL के लिए आप शायद auto_increment चाहते हैं:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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


7
मैं यह भी पुष्टि कर सकता हूं कि यह वास्तव में MySQL के लिए काम करता है; मैंने अभी-अभी एक मौजूदा unindexed टेबल में एक incrementing id फ़ील्ड जोड़ा है और प्रत्येक पंक्ति को एक अद्वितीय नई आईडी मिली है।
डग कवेन्डेक

क्षमा करें, यह एक पुराना है लेकिन इसने शीर्षक में SQL सर्वर कहा है।
निक

11

oracle के लिए आप नीचे जैसा कुछ कर सकते हैं

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

और पोस्टग्रैज समकक्ष (दूसरी पंक्ति अनिवार्य है तभी आप "आईडी" एक कुंजी चाहते हैं):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);

4

बस एक काम का उपयोग कर काम करना चाहिए। कॉलम को उचित प्रकार और एक पहचान ध्वज के साथ जोड़ें और इसे चाल करना चाहिए

इस MSDN लेख की जाँच करें http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx पर अन्य तालिका के सिंटैक्स पर।


3

SQL सर्वर में UNIQUEIDENTIFIER डेटाटाइप के लिए यह प्रयास करें

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

यदि आप प्राथमिक कुंजी बनाना चाहते हैं तो उस कॉलम का उपयोग करें

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

डेटाबेस पर निर्भर करता है क्योंकि प्रत्येक डेटाबेस में अनुक्रम संख्या जोड़ने का एक अलग तरीका है। मैं कॉलम को जोड़ने के लिए तालिका को बदल दूंगा फिर डेटा में पढ़ने के लिए groovy / python / आदि में एक db स्क्रिप्ट लिखूंगा और एक अनुक्रम के साथ आईडी को अपडेट करूंगा। एक बार डेटा सेट हो जाने के बाद, मैं शीर्ष क्रम के बाद शुरू होने वाली तालिका में एक क्रम जोड़ दूंगा। डेटा सेट हो जाने के बाद, प्राथमिक कुंजियों को सही ढंग से सेट करें।


0

यदि आप नहीं चाहते कि आपका नया कॉलम टाइप IDENTITY(ऑटो-इन्क्रीमेंट) का हो, या आप उस क्रम के बारे में विशिष्ट होना चाहते हैं जिसमें आपकी पंक्तियाँ क्रमांकित हैं, तो आप टाइप का एक कॉलम जोड़ सकते हैं INT NULLऔर फिर इसे इस तरह से पॉप्युलेट कर सकते हैं । मेरे उदाहरण में, नए कॉलम को MyNewColumn कहा जाता है और तालिका के लिए मौजूदा प्राथमिक कुंजी कॉलम को MyPrimaryKey कहा जाता है।

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

यह SQL Sever 2005 और बाद में, अर्थात समर्थन करने वाले संस्करणों में काम करता है ROW_NUMBER()

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