@Phil: क्या आपका मतलब यह नहीं है कि आपकी तालिका में दो (2) कॉलम, ऑटोक्रेसी पीके कॉलम और एक व्यवस्थापक नाम है? यदि इसमें केवल एक कॉलम है जहाँ AdminName जाता है, तो AdminName PK है और आप निश्चित रूप से एक स्ट्रिंग को इंगित नहीं कर सकते। क्या व्यावसायिक नियम आपको पूरी तरह से योग्य विंडोज उपयोगकर्ता नाम प्राथमिक कुंजी बनाने की उम्मीद करते हैं? यह व्यवहार्य होगा और समझ में आता है, क्योंकि तब आपको AdminName कॉलम पर एक वैकल्पिक अद्वितीय सूचकांक की आवश्यकता नहीं होगी।
लेकिन अगर आपकी तालिका में दो कॉलम हैं, तो एक नहीं:
SQLServer में autoincrement तालिका / स्तंभ परिभाषा का हिस्सा है। आप स्तंभ को पूर्णांक के रूप में परिभाषित करते हैं और फिर इसे एक पहचान स्तंभ भी बनाते हैं, वेतन वृद्धि को निर्दिष्ट करते हुए, आमतौर पर 1, लेकिन यह 2 या 5 या 10 या जो भी हो सकता है। एक पंक्ति सम्मिलित करने के लिए, आप बस दूसरे कॉलम (मानों) को डालें और पीके कॉलम के साथ कुछ भी न करें:
insert into T
(foo)
values('bar')
आपकी संग्रहीत खरीद जो सम्मिलित करता है वह SCOPE_IDENTITY को RURURN मान बना सकता है या SCOPE_IDENTITY ग्राहक को वापस OUT पैरामीटर के रूप में पारित किया जा सकता है।
पीएस SCOPE_IDENTITY () मौजूदा दायरे में सबसे हाल ही में उत्पन्न स्वत: संचित पहचान मूल्य लौटाता है; यह अगले पहचान मूल्य को उत्पन्न नहीं करता है।
संपादित करें:
संभवतः, आपकी व्यवस्थापक तालिका में व्यवस्थापकों का एक समूह है। लेकिन अगर इसमें पूर्णांक प्राथमिक कुंजी कॉलम के अलावा कोई भी कॉलम नहीं है, तो प्रशासकों की पहचान करने का कोई तरीका नहीं है; केवल एक चीज जो आप कर सकते हैं, वह है उन्हें एक दूसरे से अलग करना। यह आपको बहुत दूर नहीं मिलता है। लेकिन अगर आपकी प्रशासक तालिका में निम्नलिखित संरचनाएं थीं:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
या
windowsusername varchar(50) primary key
आप अन्य तालिकाओं से व्यवस्थापक की तालिका को संदर्भित करने में सक्षम होंगे, और विदेशी कुंजी MEANINGFUL होगी। और यह ठीक है कि एक एकल पूर्णांक स्तंभ से मिलकर तालिका में क्या कमी है - अर्थ।
दो कॉलम होने के बाद, आप एक संग्रहीत कार्यविधि कर सकते हैं:
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
और आपका क्लाइंट-प्रोग्राम एक लौटाए गए मान के रूप में वापस आ जाएगा जो स्वत: प्राप्त आईडी था जिसे ऑटोगेनरेटेड और नव सम्मिलित पंक्ति में सौंपा गया था। यह दृष्टिकोण सामान्य अभ्यास है, और मैं यह कहना चाहूंगा कि इसे "सर्वोत्तम अभ्यास" माना जाता है।
पुनश्च आप उल्लेख करते हैं कि आपको नहीं पता था कि "मूल्य डालने के लिए कैसे" यदि आपके पास "डालने के लिए कुछ भी नहीं था"। वहाँ एक विरोधाभास है। अगर आपके पास डालने के लिए कुछ नहीं है, तो क्यों डालें? यदि आप ग्राहक के बारे में बिल्कुल कुछ नहीं जानते हैं, तो आप एक नया ग्राहक रिकॉर्ड क्यों बनाएंगे? उनका नाम नहीं, उनका शहर, उनका फोन नंबर, कुछ नहीं?