यदि आपने कभी SQL सर्वर में किसी पहचान कॉलम में मान डालने का प्रयास किया है, तो आपको इस तरह की त्रुटि दिखाई दे सकती है:
<ब्लॉककोट>IDENTITY_INSERT के बंद पर सेट होने पर 'कलाकार' तालिका में पहचान कॉलम के लिए स्पष्ट मान सम्मिलित नहीं किया जा सकता।
यह सामान्य बात है। एक कारण के लिए एक पहचान कॉलम है। यह स्वचालित रूप से डाली गई प्रत्येक पंक्ति के लिए बढ़ते मान के साथ कॉलम को पॉप्युलेट करता है। इसलिए आपको उस कॉलम में कोई मान डालने की आवश्यकता नहीं है।
हालांकि, कभी-कभी आप करते हैं पहचान कॉलम में मान डालने की आवश्यकता है। उदाहरण के लिए, आप डेटाबेस को ऐसे डेटा से भर सकते हैं जिसे अपने स्वयं के पहचान मूल्यों को बनाए रखने की आवश्यकता है। अगर ऐसा है, तो आपको IDENTITY
. को ओवरराइड करना होगा संपत्ति। यहां बताया गया है।
IDENTITY_INSERT सक्षम करें
आप IDENTITY
को ओवरराइड कर सकते हैं IDENTITY_INSERT
. को सक्षम करके संपत्ति . यह आपको अपने स्वयं के मूल्यों को एक पहचान कॉलम में सम्मिलित करने की अनुमति देता है।
यहां एक उदाहरण दिया गया है:
SET IDENTITY_INSERT Artists ON; INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom) VALUES (1001, 'AC/DC','1973-01-11'), (1002, 'Allan Holdsworth','1969-01-01'), (1003, 'Buddy Rich','1919-01-01'); SET IDENTITY_INSERT Artists OFF;
इस उदाहरण में, कलाकार तालिका में एक पहचान स्तंभ है (इस मामले में, कलाकार आईडी पहचान स्तंभ है)। IDENTITY
को ओवरराइड करने के लिए संपत्ति हम केवल INSERT
. से पहले आते हैं SET IDENTITY_INSERT Artists ON
. यह टी-एसक्यूएल स्टेटमेंट आपको यह कहने की अनुमति देता है "मुझे पता है कि इस तालिका में एक पहचान कॉलम है लेकिन इस मामले में, my डालें। इसके बजाय मान”।
ध्यान दें कि IDENTITY_INSERT
एक समय में केवल एक टेबल पर सक्षम किया जा सकता है। इसलिए IDENTITY_INSERT
को अक्षम करना एक अच्छा विचार है डालने के तुरंत बाद। यह इसे अपनी मूल स्थिति में वापस रखता है, और यदि आवश्यक हो तो यह आपको एक अलग तालिका पर एक पहचान कॉलम को ओवरराइड करने की अनुमति देता है।
साथ ही, IDENTITY_INSERT
. को सक्षम करने के लिए उपयोगकर्ता के पास टेबल होना चाहिए या उसके पास ALTER
होना चाहिए मेज पर अनुमति।
तालिकाओं के बीच प्रतिलिपि बनाना
IDENTITY_INSERT
को सक्षम करना तालिकाओं के बीच डेटा कॉपी करते समय भी उपयोगी हो सकता है। उदाहरण के लिए, आप एक टेबल को दूसरी टेबल से पॉप्युलेट कर सकते हैं।
आर्टिस्ट टेबल से आर्टिस्ट_आर्काइव टेबल पर डेटा कॉपी करने का एक उदाहरण यहां दिया गया है:
SET IDENTITY_INSERT Artists_Archive ON; INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom) SELECT ArtistId, ArtistName, ActiveFrom FROM Artists; SET IDENTITY_INSERT Artists_Archive OFF;
ध्यान देने वाली एक बात यह है कि, यदि पहचान कॉलम में प्राथमिक कुंजी बाधा है, तो यह गंतव्य तालिका में पहले से मौजूद किसी भी मान को अस्वीकार कर देगा। इसलिए आपको पूरी तरह से सुनिश्चित होना चाहिए कि पहचान कॉलम को ओवरराइड करना वही है जो आप निश्चित रूप से करना चाहते हैं।