इस लेख में, हम SQL सर्वर पहचान संपत्ति और पहचान कॉलम सुविधाओं की मूल बातें और विवरण का पता लगाएंगे। साथ ही, हम इस बात पर भी विचार करेंगे कि IDENTITY_INSERT सुविधा के माध्यम से पहचान कॉलम में स्पष्ट मान कैसे सम्मिलित करें।
SQL सर्वर पहचान गुण और पहचान स्तंभ का परिचय
SQL सर्वर में, आइडेंटिटी प्रॉपर्टी हमें आइडेंटिटी प्रॉपर्टी सिंटैक्स की सेटिंग्स के अनुसार SQL सर्वर टेबल्स में आइडेंटिटी कॉलम बनाने की अनुमति देती है। आइडेंटिटी प्रॉपर्टी का सिंटैक्स इस तरह दिखता है, और हम टेबल स्टेटमेंट बनाने या बदलने के लिए इस सिंटैक्स को लागू करते हैं।
पहचान [(बीज, वेतन वृद्धि)]
सबसे पहले, हम पहचान संपत्ति के मापदंडों की जांच करेंगे। यह गुण दो इनपुट पैरामीटर लेता है:पहला एक बीज है और दूसरा एक वेतन वृद्धि है। बीज पैरामीटर निर्दिष्ट करता है कि तालिका में सम्मिलित मूल्य का पहला प्रारंभिक मान और वृद्धि पैरामीटर सम्मिलित डेटा के वृद्धि मूल्य को परिभाषित करता है।
अब, हम कुछ उदाहरणों के साथ पहचान संपत्ति की इस प्रमुख परिभाषा को तेज करेंगे।
SQL सर्वर में आइडेंटिटी कॉलम कैसे बनाएं
उदाहरण-1 :निम्नलिखित उदाहरण में, हम एक पहचान कॉलम बनाएंगे और पहला मान 1 से शुरू होगा और 1 से 1 की वृद्धि करेगा।
ड्रॉप टेबल अगर मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT Identity(1,1), Col1 VARCHAR(100)) GOINSERT INTO TestIdentityVALUES ('पहली सम्मिलित पंक्ति') TestIdentityVALUES ('दूसरी सम्मिलित पंक्ति') में सम्मिलित करें TestIdentityVALUES ('तीसरी सम्मिलित पंक्ति') TestIdentityVALUES में सम्मिलित करें ('चौथी सम्मिलित पंक्ति') Id को [IdentityColumn] के रूप में चुनें, TestIdentity से Col1
उदाहरण-2 :निम्नलिखित उदाहरण में, हम एक पहचान कॉलम बनाएंगे और पहला मान 37 से शुरू होगा और 20 से 20 की वृद्धि करेगा।
ड्रॉप टेबल अगर मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(37,20), Col1 VARCHAR(100)) GOINSERT INTO TestIdentityVALUES ('पहली सम्मिलित पंक्ति') TestIdentityVALUES ('दूसरी सम्मिलित पंक्ति') INSERT में डालें TestIdentityVALUES ('तीसरी सम्मिलित पंक्ति') TestIdentityVALUES में सम्मिलित करें ('चौथी सम्मिलित पंक्ति') Id को [IdentityColumn] के रूप में चुनें, TestIdentity से Col1
जैसा कि आप ऊपर दिए गए उदाहरण में देख सकते हैं, पहचान संपत्ति बीज और पहचान मापदंडों के अनुसार स्वत:वृद्धि मूल्यों की पीढ़ी प्रदान करती है।
SQL सर्वर पहचान कॉलम में स्पष्ट मान कैसे डालें?
डिफ़ॉल्ट रूप से, पहचान संपत्ति हमें पहचान कॉलम में स्पष्ट मान सम्मिलित करने की अनुमति नहीं देती है। यदि आप किसी पहचान कॉलम में स्पष्ट मान सम्मिलित करने का प्रयास करते हैं, तो आपको निम्न त्रुटि का अनुभव होगा।
ड्रॉप टेबल यदि मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100))GOINSERT INTO TestIdentityVALUES (1,'पहली सम्मिलित पंक्ति')
संदेश 8101, स्तर 16, राज्य 1, पंक्ति 9
पहचान कॉलम के लिए एक स्पष्ट मान तालिका, 'TestIdentity' को केवल तभी निर्दिष्ट किया जा सकता है जब स्तंभ सूची का उपयोग किया जाता है और IDENTITY_INSERT चालू होता है।
हम तालिका की IDENTITY_INSERT सुविधा को सक्षम करके इस त्रुटि को दूर कर सकते हैं। अब, हम इन्सर्ट स्टेटमेंट को इस प्रकार बदलेंगे।
DROP TABLE IF EXISTS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id, Col1) VALUES (1,'पहली सम्मिलित पंक्ति')सेट पहचान TestIdentity OFFSELECT * TestIdentity से
इस मुद्दे के बारे में एक और महत्वपूर्ण बात यह है कि हमें स्टेटमेंट डालने के लिए एक कॉलम लिस्ट लिखनी है। अगर हम ऐसा नहीं करते हैं, तो हमें निम्न त्रुटि का अनुभव होगा।
DROP TABLE IF EXISTS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity VALUES (1,'पहली सम्मिलित पंक्ति')SET IDENTITY_INSERT TestI>
संदेश 8101, स्तर 16, राज्य 1, पंक्ति 9
पहचान कॉलम के लिए एक स्पष्ट मान तालिका, 'TestIdentity' को केवल तभी निर्दिष्ट किया जा सकता है जब स्तंभ सूची का उपयोग किया जाता है और IDENTITY_INSERT चालू होता है।यह त्रुटि परिभाषित करती है कि सम्मिलित विवरण में स्तंभ सूची अनुपलब्ध है। नीचे दिए गए इन्सर्ट स्टेटमेंट में, हम इस त्रुटि को ठीक कर देंगे।
DROP TABLE IF EXISTS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100)) SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id, Col1) --- कॉलम सूचीVALUES (90,'पहली सम्मिलित पंक्ति ')SET IDENTITY_INSERT TestIdentity OFF
कुछ मामलों में, हमें एक तालिका में दूसरी तालिका से डेटा सम्मिलित करने की आवश्यकता होती है। इस ऑपरेशन को करने के सर्वोत्तम तरीकों में से एक "INSERT INTO SELECT" स्टेटमेंट का उपयोग करना है। हालाँकि, यदि लक्ष्य तालिका में एक पहचान स्तंभ है, तो हमें लक्ष्य तालिका में IDENTITY_INSERT विकल्प को सक्षम करने की आवश्यकता है। साथ ही, हमें लक्ष्य तालिका की कॉलम सूची लिखनी है।
ड्रॉप टेबल अगर टेस्टइडेंटिटी मौजूद हैड्रॉप टेबल अगर सोर्सटेबल है तो टेबल सोर्सटेबल बनाएं (आईडी INT,Val1 VARCHAR(100))सोर्सटेबल वैल्यूज में डालें (1,'पहली पंक्ति'),(2,'दूसरी पंक्ति')GOCREATE TABLE TestIdentity( आईडी INT पहचान (1,1), कर्नल 1 VARCHAR (100)) SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id, Col1) चुनें * SourceTableSET से IDENTITY_INSERT TestIdentity OFF
IDENTITY_INSERT विकल्प का दोष यह है कि यह पहचान स्तंभ मानों के बीच अंतर पैदा कर सकता है। निम्नलिखित के जैसा एक बयान पहचान कॉलम मानों के बीच एक अंतर उत्पन्न करेगा।
DROP TABLE IF EXISTS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100)) INSERT INTO TestIdentity --- कॉलम सूची VALUES ('पहली सम्मिलित पंक्ति (INDENTITY_INSERT_OFF)') IDENTITY_INSERT परीक्षण सेट करें TestIdentity (Id, Col1) --- कॉलम सूची VALUES (90, 'दूसरी सम्मिलित पंक्ति (INDENTITY_INSERT_ON') SET IDENTITY_INSERT TestIdentity OFFINSERT INTO TestIdentity --- कॉलम सूचीVALUES ('तीसरी सम्मिलित पंक्ति (INDENTITY_INSERT_OFF)') चयन
DBCC CHECKIDENT कमांड
DBCC CHECKIDENT कमांड हमें पहचान कॉलम के अंतिम मान के बारे में विवरण प्राप्त करने की अनुमति देता है। यह फ़ंक्शन पहचान कॉलम के वर्तमान मान को किसी अन्य मान पर रीसेट करने और बदलने की भी अनुमति देता है। अब, हम पहचान का अंतिम मान DBCC CHECKIDENT कमांड के माध्यम से प्राप्त करेंगे।
ड्रॉप टेबल अगर मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT Identity(1,1), Col1 VARCHAR(100)) GOINSERT INTO TestIdentityVALUES ('पहली सम्मिलित पंक्ति') TestIdentityVALUES ('दूसरी सम्मिलित पंक्ति') में सम्मिलित करें TestIdentityVALUES ('तीसरी सम्मिलित पंक्ति') TestIdentityVALUES में सम्मिलित करें ('चौथी सम्मिलित पंक्ति')DBCC CHECKIDENT ('TestIdentity', NORESEED)
DBCC CHECKIDENT कमांड के बारे में एक अन्य विकल्प पहचान कॉलम को एक आवश्यक मान पर रीसेट करना है। निम्नलिखित उदाहरण में, RESEED पैरामीटर पहचान कॉलम के अधिकतम मान को 100 में बदल देता है और बाद में डाले गए मान इस अधिकतम मान का उपयोग करते हैं।
ड्रॉप टेबल अगर मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT Identity(1,1), Col1 VARCHAR(100)) GOINSERT INTO TestIdentityVALUES ('पहली सम्मिलित पंक्ति') TestIdentityVALUES ('दूसरी सम्मिलित पंक्ति') में सम्मिलित करें TestIdentityVALUES ('तीसरी सम्मिलित पंक्ति') TestIdentityVALUES ('चौथी सम्मिलित पंक्ति') में सम्मिलित करें GODBCC CHECKIDENT ('TestIdentity', RESEED, 100) TestIdentityValues ('पांचवीं सम्मिलित पंक्ति') में प्रवेश करें * TestIdentity से चुनें
SQL सर्वर पहचान स्तंभ और विशिष्टता
पहचान कॉलम अद्वितीय मूल्यों की पीढ़ी की गारंटी नहीं देते हैं। पहचान स्तंभों के बारे में यह आम भ्रमित करने वाला मुद्दा है, इसलिए यदि हम उत्पन्न मूल्यों की विशिष्टता सुनिश्चित करना चाहते हैं, तो हम इन स्तंभों के लिए अद्वितीय अनुक्रमणिका का उपयोग कर सकते हैं। अब, हम साबित करेंगे और प्रदर्शित करेंगे कि पहचान कॉलम पर डुप्लिकेट मान कैसे बनाएं।
DROP TABLE IF EXISTS TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1), Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id, Col1) VALUES (1,'पहली सम्मिलित पंक्ति (INDENTITY)_INSERT' )INSERT INTO TestIdentity (Id, Col1) VALUES (1,'पहली सम्मिलित पंक्ति (INDENTITY_INSERT_OFF)') SET IDENTITY_INSERT TestIdentity OFFSELECT * FROM TestIdentity
इसके अलावा, SQL सर्वर में आइडेंटिटी कॉलम और प्राइमरी कीज़ दो अलग-अलग ऑब्जेक्ट हैं। पहचान कॉलम का उपयोग उद्देश्य ऑटो-इंक्रीमेंटेड नंबर जेनरेट करना है। दूसरी ओर, प्राथमिक कुंजी बाधा किसी विशेष कॉलम में मूल्यों की विशिष्टता की गारंटी देती है और प्रदान करती है। प्राथमिक कुंजी बाधा परिभाषित स्तंभों के लिए अद्वितीय मानों को लागू करती है, क्योंकि डिफ़ॉल्ट रूप से, प्राथमिक कुंजी तालिका में एक संकुल अद्वितीय अनुक्रमणिका बनाती है। सामान्य उपयोग में, प्राथमिक कुंजी बाधा और पहचान संपत्ति का एक साथ उपयोग किया जा सकता है। यह उपयोग दृष्टिकोण हमें प्राथमिक कुंजी विशिष्टता और पहचान ऑटो-इन्क्रीमेंट सुविधा के लचीलेपन को लागू कॉलम में लाने में मदद करता है। निम्नलिखित उदाहरण में, हम Id कॉलम में एक प्राथमिक कुंजी बाधा भी जोड़ेंगे और यह सम्मिलित किए गए मानों को डुप्लिकेट करने से रोकेगा।
ड्रॉप तालिका यदि मौजूद है TestIdentityCREATE TABLE TestIdentity(Id INT IDENTITY(1,1) PRIMARY KEY, Col1 VARCHAR(100))SET IDENTITY_INSERT TestIdentity ONINSERT INTO TestIdentity (Id, Col1) VALUES (1,' पहली डाली गई पंक्ति (INDENTITY_INSERT_) )') TestIdentity में INSERT (Id, Col1) VALUES (1,'पहली सम्मिलित पंक्ति (INDENTITY_INSERT_OFF)') SET IDENTITY_INSERT TestIdentity OFFSELECT * FROM TestIdentity
जब हम ऑब्जेक्ट एक्सप्लोरर में TestIdentity टेबल के इंडेक्स टैब को नेविगेट करते हैं, तो हम एक अद्वितीय क्लस्टर इंडेक्स का पता लगा सकते हैं जो प्राथमिक कुंजी बाधा द्वारा बनाया गया है। यह बाधा Id कॉलम के लिए अद्वितीय मानों पर लागू होती है।
निष्कर्ष
इस लेख में, हमने SQL सर्वर आइडेंटिटी प्रॉपर्टी और आइडेंटिटी कॉलम की मूलभूत अवधारणाओं और उपयोग विधियों पर चर्चा की।
संदर्भ
- तालिका बनाएं (लेनदेन-एसक्यूएल) पहचान (संपत्ति)
- प्राथमिक कुंजी बनाएं