जब आप SQL सर्वर में तालिका बनाने (या बदलने) के लिए T-SQL का उपयोग करते हैं, तो आपके पास IDENTITY()
का उपयोग करने का विकल्प होता है एक पहचान कॉलम बनाने के लिए संपत्ति।
एक पहचान कॉलम में स्वचालित रूप से बढ़ती पहचान संख्या होती है। IDENTITY()
संपत्ति का उपयोग CREATE TABLE
. के साथ किया जा सकता है और ALTER TABLE
बयान।
सिंटैक्स
वाक्य रचना इस प्रकार है:
IDENTITY [ (seed , increment) ]
बीज वह मान है जो तालिका में लोड की गई पहली पंक्ति के लिए उपयोग किया जाता है।
वृद्धि वृद्धिशील मान है जो लोड की गई पिछली पंक्ति के पहचान मान में जोड़ा जाता है।
आपको दोनों तर्कों को निर्दिष्ट करना होगा या न ही। यदि आप न तो निर्दिष्ट करते हैं, तो डिफ़ॉल्ट (1,1)
. है ।
उदाहरण 1 - मूल उपयोग
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
CREATE TABLE Pets ( PetId int IDENTITY(1,1) PRIMARY KEY, PetName varchar(255) );
यह कोड दो कॉलम वाली एक टेबल बनाता है। पहला कॉलम (PetId
) एक पहचान कॉलम है क्योंकि मैं IDENTITY()
. का उपयोग करता हूं इसकी परिभाषा में संपत्ति।
अब जब मैंने एक पहचान कॉलम बना लिया है, तो मैं PetName
. में पालतू जानवरों के नाम सम्मिलित कर सकता हूं कॉलम में प्रत्येक पंक्ति के लिए एक आईडी शामिल करने की आवश्यकता नहीं है।
INSERT INTO Pets (PetName) VALUES ('Homer'), ('Felix'), ('Ruff'); SELECT * FROM Pet;
परिणाम:
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | +---------+-----------+
उदाहरण 2 - विभिन्न बीज और वृद्धि
यहां एक उदाहरण दिया गया है जो एक अलग बीज और वेतन वृद्धि का उपयोग करता है।
इस मामले में बीज 150 से शुरू होता है और प्रत्येक पंक्ति के लिए 10 से बढ़ता है।
CREATE TABLE Cities ( CityId int IDENTITY(150, 10) PRIMARY KEY, CityName varchar(255) );
अब कुछ डेटा डालें और उसे चुनें:
INSERT INTO Cities (CityName) VALUES ('Auckland'), ('Danang'), ('Khon Kaen'); SELECT * FROM Cities;
परिणाम:
+----------+------------+ | CityId | CityName | |----------+------------| | 150 | Auckland | | 160 | Danang | | 170 | Khon Kaen | +----------+------------+
उदाहरण 3 - गलत उपयोग
जैसा कि बताया गया है, आपको दोनों तर्कों को निर्दिष्ट करना होगा या न ही। दूसरे शब्दों में, आप केवल एक तर्क नहीं दे सकते। जब आप केवल एक तर्क देते हैं तो क्या होता है इसका एक उदाहरण यहां दिया गया है।
CREATE TABLE Cities ( CityId int IDENTITY(1) PRIMARY KEY, CityName varchar(255) );
परिणाम:
Msg 102, Level 15, State 1, Line 2 Incorrect syntax near ')'.
उदाहरण 4 - पहचान मानों को ओवरराइड करने का प्रयास करना
यदि आप स्वचालित पहचान मानों को ओवरराइड करने का प्रयास करते हैं, तो आपको इस तरह की त्रुटि मिल सकती है।
INSERT INTO Cities (CityId, CityName) VALUES (123, 'Bangkok');
परिणाम:
Msg 544, Level 16, State 1, Line 1 Cannot insert explicit value for identity column in table 'Cities' when IDENTITY_INSERT is set to OFF.
ऐसा इसलिए है क्योंकि आप IDENTITY()
. द्वारा बनाए गए मानों को ओवरराइड करने का प्रयास कर रहे हैं संपत्ति। कई मामलों में ऐसा हो सकता है कि आपको पता ही नहीं था कि यह एक पहचान स्तंभ है। ऐसे मामलों में, आपको बस अपने INSERT
. से पहचान कॉलम को हटाना होगा बयान।
हालांकि, यदि आप वास्तव में करते हैं IDENTITY()
को ओवरराइड करने की आवश्यकता है संपत्ति, SQL सर्वर में एक पहचान कॉलम में मान कैसे सम्मिलित करें देखें।
जैसा कि उल्लेख किया गया है, यदि आपको पहचान मानों को ओवरराइड करने की आवश्यकता नहीं है, तो आप बस उस कॉलम को अपने INSERT
से हटा सकते हैं। बयान।
इसलिए मैं पिछले कथन को इसमें संशोधित कर सकता हूं:
INSERT INTO Cities (CityName) VALUES ('Bangkok'); SELECT * FROM Cities;
परिणाम:
+----------+------------+ | CityId | CityName | |----------+------------| | 150 | Auckland | | 160 | Danang | | 170 | Khon Kaen | | 180 | Bangkok | +----------+------------+
पहचान की सीमाएं() संपत्ति
एक कॉलम पर पहचान संपत्ति निम्नलिखित की गारंटी देती है:
- प्रत्येक नया मान वर्तमान बीज और वृद्धि के आधार पर उत्पन्न होता है।
- किसी विशेष लेन-देन के लिए प्रत्येक नया मूल्य तालिका में अन्य समवर्ती लेनदेन से अलग है।
यह निम्नलिखित की गारंटी नहीं देता:
- मूल्य की विशिष्टता
- लेन-देन में लगातार मान
- सर्वर पुनरारंभ होने या अन्य विफलताओं के बाद लगातार मान
- मानों का पुन:उपयोग (उदाहरण के लिए, जब कोई
INSERT
ऑपरेशन विफल)
इन सीमाओं के बारे में अधिक जानकारी के लिए, Microsoft दस्तावेज़ देखें।