2011-01-27 11 views
5

का अंतिम रिकॉर्ड पुनर्प्राप्त करें यहां मेरी समस्या है: मेरे पास एक SQL सर्वर डेटाबेस है जिसे emp कहा जाता है। इसमें employee तालिका है (userid int कॉलम के साथ)। मुझे userid के employee तालिका में वृद्धि यूजर आईडी मान के साथ अंतिम रिकॉर्ड पुनर्प्राप्त करने की आवश्यकता है। 1 इस समय मैंने इसे अपने जीयूआई पर किया था। तो मैं इसके लिए एक एसक्यूएल क्वेरी कैसे लिखूं?SQL सर्वर तालिका

उत्तर

1

आपको उपयोगकर्ता आईडी कॉलम मैन्युअल रूप से बढ़ाना नहीं चाहिए, इसके बजाय पहचान बिंदु का उपयोग करें। यह हर नई पंक्ति के लिए स्वचालित रूप से आपके लिए 1 जोड़ देगा।

CREATE TABLE Employees (
    UserId INT IDENTITY PRIMARY KEY NOT NULL, 
    UserName NVARCHAR(255) NOT NULL, 
    // etc add other columns here 
) 

तुम सच में वास्तव में उच्चतम userid यह एक बहुत ही सरल प्रश्न है का चयन करने के हों:

SELECT MAX(UserId) + 1 
FROM Employees 

[संपादित करें]

अपनी टिप्पणी के आधार पर, आप SELECT MAX(UserId) + 1 FROM Employees क्वेरी का उपयोग करना चाहिए। लेकिन ध्यान रखें कि यह गारंटी नहीं देता कि संख्या आईडी होगी। आमतौर पर जब तक डेटाबेस में रिकॉर्ड सहेजा नहीं जाता है तब तक आप एक आईडी मान नहीं दिखाएंगे।

+0

आपके त्वरित भरोसेमंद जेके के लिए धन्यवाद। लेकिन मेरी आवश्यकता यह नहीं है। मेरे गुई के पास नया emloyee नामक एक रूप है। इसलिए एक टेक्स्ट फ़ील्ड है जो यह उपयोगकर्ता आईडी को emp table से दिखाता है। जब क्लिक करें नया कर्मचारी मैं उस टेस्ट वैल को एएमपी आईडी +1 के अंतिम मान के रूप में प्रदर्शित करना चाहता हूं। –

+1

यदि आपको यह दिखाने की ज़रूरत है कि नए कर्मचारी का आईडी वास्तव में कर्मचारी को जोड़ने से पहले होगा तो उपर्युक्त क्वेरी का उपयोग करें: 'MAX से चुनें (उपयोगकर्ता आईडी) + कर्मचारियों से 1। लेकिन एक मौका है कि नया कर्मचारी वास्तव में सहेजा जाने पर आईडी नंबर नहीं होगा। –

2

उच्चतम उपयोगकर्ता आईडी के साथ रिकॉर्ड लौटने के लिए, आप कर सकते हैं:

SELECT TOP 1 userid 
FROM employee 
ORDER BY userid DESC 

या ...

SELECT MAX(userid) 
FROM employee 

अपनी योजना तो मैन्युअल रूप से उपयोगकर्ता आईडी को बढ़ा देते हैं और एक नए डालने के लिए है उस नई आईडी के साथ रिकॉर्ड करें, मैं ऐसा करने के खिलाफ अनुशंसा करता हूं - क्या होगा अगर 2 प्रक्रियाएं एक ही समय में ऐसा करने का प्रयास करें? इसके बजाए, उपयोगकर्ता आईडी के रूप में पहचान कॉलम का उपयोग करें और बढ़ते क्रमशः आपके लिए

-1

यह आपको अंतिम सम्मिलित रिकॉर्ड देगा, यदि आपके पास पहचान कॉलम नहीं है।

EXECUTE ('DECLARE GETLAST CURSOR DYNAMIC FOR SELECT * FROM [User]') 
OPEN GETLAST 
FETCH LAST FROM GETLAST 
CLOSE GETLAST 
DEALLOCATE GETLAST 

यदि आपने पहचान सेट की है तो आप निम्न का उपयोग कर सकते हैं।

SELECT top(1) ID from [YourTable] order by ID desc 
+0

त्वरित प्रतिक्रिया के लिए समस्या सभी के लिए धन्यवाद –

+0

इस स्थिति में ** वास्तव में ** एक कर्सर (बड़ा बड़ा प्रदर्शन हत्यारा !!) की कोई आवश्यकता नहीं है ..... –

+0

यह आपको अंतिम बार दर्ज किया जाएगा यदि आप ' autoincrement के रूप में कोई आईडी है। तालिका को बदलने का प्रयास करें और परिणाम देखें –

-1

सहेजने से पहले नया उपयोगकर्ता आईडी रखने के लिए, NextId तालिका बनाएं।

उपयोगकर्ता डालने से पहले, NextId से नए मूल्य प्राप्त:

UserId = SELECT Coalesce(NextId, 0) + 1 from NextId 

फिर NextID तालिका अद्यतन:

UPDATE NEXTID SET NextId = IserID 

और फिर अपने उपयोगकर्ता निर्माण कोड में उस मान का उपयोग

आप अंतराल प्राप्त कर सकते हैं, उनसे बचने के लिए और अधिक जटिल तरीके हैं; लेकिन मुझे लगता है कि यह

+0

प्राप्त करता है यदि आप कोड, एक्सएमएल या डेटा नमूने पोस्ट करते हैं, ** कृपया ** टेक्स्ट एडिटर में उन पंक्तियों को हाइलाइट करें और " कोड नमूने "बटन ({}) संपादक टूलबार पर अच्छी तरह से प्रारूप और वाक्यविन्यास इसे हाइलाइट करने के लिए! –

+0

क्या यह शून्य से 1 का कारण है? – Karel