पहचान सेट के साथ कोई स्तंभ सम्मिलित करें

पेज अद्यतन :
पेज निर्माण की तारीख :

SQL Server में एक "IDENTITY" गुण है जो स्वचालित रूप से अनुक्रमिक संख्या को 1 से किसी विशिष्ट स्तंभ पर सेट करता है जब आप कोई रिकॉर्ड जोड़ते हैं. उदाहरण के लिए, यदि आप स्तंभ A में IDENTITY सेट करते हैं और 3 रिकॉर्ड जोड़ते हैं, तो स्तंभ A स्वचालित रूप से 1, 2, और 3 के मानों के साथ उस क्रम में पॉपुलेटेड हो जाता है जिसमें आपने उन्हें जोड़ा था.

यहां तक कि अगर आप एक INSERT कथन का उपयोग करते हैं, तो मान स्वचालित रूप से सेट हो जाता है, इसलिए मान को स्पष्ट रूप से सेट करने की आवश्यकता नहीं है, लेकिन मुझे लगता है कि ऐसे मामले हैं जहां आप मान को स्पष्ट रूप से सेट करना चाहते हैं क्योंकि इसका उपयोग विदेशी कुंजी आदि के लिए किया जाता है।

एक उदाहरण के रूप में, मान लीजिए कि "ID" स्तंभ में सेट "IDENTITY" गुण के साथ एक तालिका है जैसा कि चित्र में दिखाया गया है।

कोई INSERT कथन जो ID स्तंभ सहित इस तालिका में कोई मान सम्मिलित करता है, इस प्रकार दिखेगा:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

हालांकि, जब मैं इसे चलाने का प्रयास करता हूं, तो मुझे लगता है कि निम्न त्रुटि दिखाई देगी।

संदेश 544, स्तर 16, स्थिति 1, पंक्ति 1 जब IDENTITY_INSERT बंद करने के लिए सेट किया गया है, तो स्पष्ट मान तालिका 'XXXXX' के पहचान स्तंभ में सम्मिलित नहीं किया जा सकता।

मूल रूप से पहचान पर सेट किए गए स्तंभों को मानों को स्वचालित रूप से सेट करने के लिए माना जाता है, इसलिए आप मानों को स्पष्ट रूप से सेट नहीं कर सकते हैं।

यदि आप वास्तव में इसे सेट करना चाहते हैं, तो आपको त्रुटि संदेश में वर्णित के रूप में "IDENTITY_INSERT" को "ON" पर सेट करने की आवश्यकता है। सम्मिलित करने से पहले IDENTITY_INSERT चालू करें, और सम्मिलित करें पूर्ण होने पर बंद करने के लिए वापस, निम्न SQL के रूप में:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

अब आप स्पष्ट रूप से मान सेट कर सकते हैं और इसे सम्मिलित कर सकते हैं. INSERT-SELECT तालिकाओं का उपयोग करना भी मान्य है.

पहचान वाले स्तंभ स्वचालित रूप से 1 से मान असाइन किए जाते हैं, लेकिन यदि आप स्पष्ट रूप से ऊपर वर्णित मानों को सेट करते हैं, तो आप सोच रहे होंगे कि आगे कौन सी संख्या असाइन की जाएगी। इस स्थिति में, असाइन किया गया अगला मान तालिका में जोड़े गए उच्चतम मान के बाद संख्या से असाइन किया गया है, इसलिए जब कोई नया रिकॉर्ड सम्मिलित किया जाता है तो कोई डुप्लिकेट मान नहीं होता है. (हालांकि, विकलांगता, आदि के कारण अपवाद हैं)