SQL सर्वर प्रबंधन स्टूडियो 2012 में ऑटो वेतन वृद्धि प्राथमिक कुंजी


447

मैं कैसे कर एक में डेटाबेस तालिका, मैं मंच के माध्यम से एक बार देख लिया है, लेकिन नहीं देख सकते कि कर सकते हैं।auto incrementprimary keySQL Server

मैंने संपत्तियों को देखा है, लेकिन एक विकल्प नहीं देख सकता है, मैंने एक उत्तर देखा है जहां आप Identityविनिर्देश संपत्ति पर जाते हैं और इसे हां में सेट करते हैं Identity incrementऔर 1 पर सेट करते हैं , लेकिन यह अनुभाग धूसर हो जाता है और मैं बदल नहीं सकता हां नहीं।

ऐसा करने का एक सरल तरीका होना चाहिए लेकिन मैं इसे नहीं खोज सकता।


5
क्या कुंजी कॉलम का डेटाटाइप इंट है?
राब

1
@CoDe अपने मौजूदा सेट को चार (10) के रूप में सेट करें, लेकिन मैं इसे बदल सकता हूं क्योंकि मैं अभी अभ्यास कर रहा हूं, धन्यवाद
लेग्गूमेनकी

जवाबों:


704

सुनिश्चित करें कि कुंजी कॉलम का डेटाटाइप है intऔर फिर छवि के रूप में पहचान को मैन्युअल रूप से सेट करना है

यहां छवि विवरण दर्ज करें

या बस इस कोड को चलाएं

-- ID is the name of the  [to be] identity column
ALTER TABLE [yourTable] DROP COLUMN ID 
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)

कोड चलेगा, यदि IDतालिका में एकमात्र स्तंभ नहीं है

छवि संदर्भ फीफो


21
बस सुधार का एक सा: IDENTITYसंपत्ति किसी भी संख्यात्मक डेटा प्रकार के लिए लागू किया जा सकता है (इसलिए यह हो सकता है tinyint, smallint, int, bigint, numeric, decimal), केवल बाधा है कि यह आंशिक संख्या का प्रतिनिधित्व नहीं कर सकता है (इसलिए यह है नहीं किया जा सकता float या real, न तो numericया decimal गैर-शून्य पैमाने के साथ ) और inc, पहचान युक्ति चयनित डेटा प्रकार के साथ संगत होनी चाहिए।
Pred

2
कार्य की, बशर्ते कोई विदेशी कुंजियाँ आदि न हों
एंड्रयू डे

3
यदि आप पहले से ही अपने पहचान कॉलम पर डिफ़ॉल्ट मान सेट कर चुके हैं, तो मैं जोड़ना चाहता था, (आइडेंटिटी) बाहर रखा हुआ है। डिफ़ॉल्ट मान निकालें, और यह फिर से उपलब्ध हो जाता है।
CDspace

7
यदि आप मानों को संशोधित नहीं कर सकते हैं, तो टूल-ऑप्शंस-डिज़ाइनर्स पर जाएं और विकल्प को अनचेक करें "उन परिवर्तनों को रोकने के लिए जिन्हें पुन: निर्माण की आवश्यकता है"।
जाउम

185

जब आप तालिका बना रहे हों, तो आप एक IDENTITYकॉलम बना सकते हैं :

CREATE TABLE (
  ID_column INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  ...
);

IDENTITYसंपत्ति वसीयत ऑटो वेतन वृद्धि से नंबर 1. कॉलम (ध्यान दें कि स्तंभ का डेटा प्रकार एक पूर्णांक हो गया है।) यदि आप किसी मौजूदा स्तंभ में जोड़ना चाहते हैं, एक का उपयोग ALTER TABLEआदेश।

संपादित करें:
थोड़ा सा परीक्षण किया गया है, और मैं विभिन्न तालिकाओं के लिए कॉलम गुण विंडो के माध्यम से पहचान गुणों को बदलने का एक तरीका नहीं खोज सकता। मुझे लगता है कि यदि आप एक कॉलम को एक पहचान स्तंभ बनाना चाहते हैं, तो आपको एक ALTER TABLEकमांड का उपयोग करना होगा ।


आह, यह विशेष रूप से SQL Server 2008 r2 के लिए है - कोई बात नहीं।
जोसिन

2
टिप्पणियों में इस पोस्ट के लेखक द्वारा दी गई सलाह के अनुसार यह सारणी वाक्य रचना अच्छा अभ्यास है , आशा है कि किसी की मदद करें।
12

88

वेतन वृद्धि और बीज का खुलासा करने के लिए आपको पहचान अनुभाग का विस्तार करना होगा।

यहां छवि विवरण दर्ज करें

संपादित करें: मैंने मान लिया कि आपके पास पूर्णांक डेटाटाइप होगा, न कि चार (10)। जब मैं इस उत्तर को पोस्ट करता हूं तो मैं उचित और मान्य कहूंगा


2
yesधूसर हो जाता है के रूप में यह char(10)(टिप्पणी से सिर्फ पोस्ट)
मार्टिन स्मिथ

@ मर्टिन स्मिथ हाँ जो सामान्य मुद्दा लगता है, मैं इसे बदलने जा रहा हूं और परीक्षण
करूंगा

एक नई तालिका बनाते समय मैंने प्रयोग किया BookID int primary key identityथा जिसमें मैंने बीज और वृद्धि दोनों को निर्दिष्ट नहीं किया है, क्या यह अच्छा अभ्यास है? कारण मैं MSDN में दस्तावेज़ देखता हूं यदि न तो निर्दिष्ट किया गया है, तो डिफ़ॉल्ट (1,1) है।
शैजुत

40

अपने डेटाबेस का विस्तार करें, अपनी टेबल पर अपनी टेबल राइट क्लिक का विस्तार करें और ड्रॉपडाउन से डिजाइन का चयन करें । यह इस तरह दिख रहा है

अब इसके नीचे कॉलम प्रॉपर्टीज़ को स्क्रॉल करें और आइडेंटिटी स्पेसिफिकेशन खोजें , इसे विस्तृत करें और आप पाएंगे आइडेंटिटी इसे हां कर देते हैं। अब इसके ठीक नीचे आइडेंटिटी इन्क्रीमेंट चुनें, जो मूल्य आप इसमें बढ़ाना चाहते हैं, उसे दें। यहां छवि विवरण दर्ज करें


1
ऐसा लगता है कि यह मेरे लिए सही उत्तर होगा, बस डेटा टाइप को एक int बनाने की कोशिश सही नहीं होगी?
ड्रूयडिन

10

शायद मुझे कुछ याद आ रहा है, लेकिन इस उद्देश्य के साथ काम क्यों नहीं करता है? क्या यह वह नहीं है जिसकी आपको तलाश है?

उदाहरण:

CREATE SCHEMA blah.
GO

CREATE SEQUENCE blah.blahsequence
START WITH 1
INCREMENT BY 1
NO CYCLE;

CREATE TABLE blah.de_blah_blah
(numbers bigint PRIMARY KEY NOT NULL
......etc

जब एक INSERT कमांड का उपयोग करने के लिए कहा जाता है, तो स्क्वेन्स का संदर्भ दें:

NEXT VALUE FOR blah.blahsequence

अधिक जानकारी और के लिए विकल्प SEQUENCE


यह समाधान सही है यदि आप सम्मिलित पंक्तियों के समय क्रम के बारे में परवाह करते हैं, क्योंकि IDENTITYकभी-कभी अंतराल छोड़ते हुए कूदता है तो उन अंतरालों को फिर से भरना है। तो IDENTITYहमेशा की स्थिति की गारंटी नहीं देता है
FindOut_Quran

1
@Martin स्मिथ उफ़, लिंक का अनुसरण नहीं किया, मेरी गलती! मुझे एमएस-एसक्यूएल की इतनी आदत है कि कुछ ऐसे फीचर्स नहीं हैं जिन्हें मैं कभी-कभी भूल जाता हूं कि ऐसे नए संस्करण हैं जो अधिक सामान का समर्थन करते हैं। मैं अपनी टिप्पणी को हटा दूंगा क्योंकि यह भ्रामक हो सकता है ... यदि अधिक सामान्य व्यक्त किया जाता है, तो यह मान्य रहता है: हालांकि हो सकता है कि वह RDBMS मेक / संस्करण का उपयोग कर रहा हो जो SEQUENCE वस्तुओं का समर्थन नहीं करता है - खासकर जब से प्रश्न केवल एक से पूछा गया था SQL सर्वर 2012 जारी होने के कुछ महीने बाद;)
पॉल ग्रूके

1
@FindOut_Quran क्या आप सुनिश्चित हैं कि IDENTITY कॉलम के अंतराल भरे हुए हैं? मैंने केवल SQL सर्वर 2005 के साथ काम किया है जहां मैंने कभी ऐसा नहीं देखा है - अंतराल बस बने रहें। और मैं इसे किसी भी आरडीबीएमएस पर देखने के बजाय आश्चर्यचकित रहूंगा क्योंकि इस तरह की सुविधा "न मुक्त" (प्रदर्शन-वार) और "वांछनीय नहीं" (कम से कम अधिकांश अनुप्रयोगों में) का एक अजीब संयोजन होगा।
पॉल ग्रोके

@PaulGroke हां मुझे यकीन है। आप 1000 पंक्तियों को सम्मिलित करने के लिए लेनदेन का उपयोग करने की कोशिश कर सकते हैं, फिर रोलबैक कर सकते हैं। मूर्खता का मूल्य उछल जाएगा। अधिक हज़ारों पंक्तियों को सम्मिलित करने का प्रयास करें और / या रोलबैक करें। आप इसे कभी-कभी अंतराल भरने के लिए नोटिस करेंगे
FindOut_Quran

@FindOut_Quran मैं नहीं देख सकता कि यह कैसे हो सकता है। MS SQL IDENTITY कॉलम एक साधारण काउंटर का उपयोग करता है जो उपयोगकर्ता-निश्चित मूल्य पर आधारित होता है और फिर उपयोगकर्ता-निश्चित मान द्वारा बढ़ाया जाता है। आप काउंटर को क्वेरी और री-सेट भी कर सकते हैं। एकमात्र तरीका यह हो रहा है जब समवर्ती लेनदेन "ऑर्डर से बाहर" होता है। यानी उस लेनदेन को जो पहले पहचान काउंटर से टकरा रहा था, दूसरे लेनदेन के बाद शुरू होता है । उस स्थिति में आपके पास एक अल्पकालिक अंतर होगा जो तब भर जाता है। जो टकराव से बचने के लिए आवश्यक है। पहचान काउंटर हालांकि वापस कूद नहीं होगा।
पॉल ग्रोके

7

जब आप डेटा प्रकार का उपयोग कर रहे हैं: int आप पंक्ति का चयन कर सकते हैं जिसे आप स्वत: प्राप्त करना चाहते हैं और कॉलम गुण टैग पर जाएं। वहां आप पहचान को 'हां' में सेट कर सकते हैं। ऑटोइन्क्रिमेंट के लिए शुरुआती मूल्य भी वहां संपादित किया जा सकता है। आशा है कि मैं मदद कर सकता हूँ;)


स्तंभ गुण कहाँ पर स्थित है?

2

मेरे पास यह मुद्दा था जहां मैंने पहले ही तालिका बना ली थी और तालिका को गिराए बिना इसे बदल नहीं सकता था इसलिए मैंने क्या किया: (यकीन नहीं कि जब उन्होंने इसे लागू किया था, लेकिन यह एसक्यूएल 2016 में था)

ऑब्जेक्ट एक्सप्लोरर में टेबल पर राइट क्लिक करें:

Script Table as > DROP And CREATE To > New Query Editor Window

फिर जोसियन द्वारा कही गई स्क्रिप्ट को संपादित करें; नीचे की ओर स्क्रॉल करें, जहां CREATE TABLEहै, अपनी प्राथमिक कुंजी ढूंढें और IDENTITY(1,1)अल्पविराम से पहले अंत में जोड़ें । स्क्रिप्ट चलाएँ।

इस समस्या के कारण DROP और CREATE स्क्रिप्ट भी मेरे लिए मददगार थी (जो उत्पन्न स्क्रिप्ट संभालती है।)


1

केयरफुल रहें जैसे कि अगर आप चाहते हैं कि आईडी एलिमेंट्स कॉन्टिजियस हों या न हों। जैसे SQLSERVER ID 1000 तक उछल सकती है।

एग्जाम: रिस्टार्ट होने के बाद आईडी = 11 को रीस्टार्ट करने से पहले, आप टेबल में नई रो डालें, फिर आईडी 1012 होगी।


1

आप तालिका बनाते समय बाधा IDENTITYके साथ कॉलम में डेटा प्रकार के रूप में कीवर्ड का उपयोग कर सकते हैं PRIMARY KEY
उदाहरण के लिए:

StudentNumber IDENTITY(1,1) PRIMARY KEY

यहाँ पहले '1' का अर्थ है शुरुआती मूल्य और दूसरा '1' का बढ़ता हुआ मूल्य।


1
CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

MS-SQL सर्वर एक ऑटो-इंक्रीमेंट सुविधा को करने के लिए IDENTITY कीवर्ड का उपयोग करता है।

ऊपर दिए गए उदाहरण में, पहचान के लिए शुरुआती मूल्य 1 है, और यह प्रत्येक नए रिकॉर्ड के लिए 1 की वृद्धि होगी।

युक्ति: यह निर्दिष्ट करने के लिए कि "व्यक्ति" कॉलम को मूल्य 10 से शुरू करना चाहिए और 5 से वृद्धि करना चाहिए, इसे पहचान (10,5) में बदलें।

"व्यक्ति" तालिका में एक नया रिकॉर्ड सम्मिलित करने के लिए, हमें "व्यक्ति" कॉलम के लिए मान निर्दिष्ट नहीं करना होगा (एक अद्वितीय मूल्य स्वचालित रूप से जोड़ा जाएगा):


0

यदि तालिका पहले से ही आबाद है, तो कॉलम को IDENTITY कॉलम में बदलना संभव नहीं है या इसे गैर IDENTITY कॉलम में परिवर्तित नहीं किया जा सकता है। आपको सभी डेटा को निर्यात करने की आवश्यकता होगी तब आप कॉलम प्रकार को पहचान या इसके विपरीत में बदल सकते हैं और फिर डेटा वापस आयात कर सकते हैं। मुझे पता है कि यह दर्दनाक प्रक्रिया है लेकिन मेरा मानना ​​है कि इस पोस्ट में उल्लिखित अनुक्रम का उपयोग करने के अलावा कोई विकल्प नहीं है।


1
आप ALTER TABLE ... SWITCHकेवल डेटा को छूने के बिना मेटाडेटा को स्विच करने के लिए उपयोग कर सकते हैं । उदाहरण देखें कि किसी भी डेटा हानि के बिना तालिका बनाने के बाद ऑटो वेतन वृद्धि कैसे सेट करें?
मार्टिन स्मिथ

1
आपके द्वारा प्रदान किए गए लिंक में उल्लिखित प्रक्रिया में डेटा को अस्थायी तालिका में और वापस स्थानांतरित करना शामिल है जो ऊपर दिए गए मेरे कथन से सहमत है। अगर मैं गलत हूं तो कृपया मुझे काम करने का उदाहरण दें।
सॉफ्टेक

1
लिंक में एक कार्यशील उदाहरण है। कोई भी "डेटा को टेम्‍प टेबल और बैक में ट्रांसफर नहीं कर रहा है"। `पहले से तय ... स्विच 'एक मेटाडेटा केवल परिवर्तन है। यह कोई डेटा स्थानांतरित नहीं करता है।
मार्टिन स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.