नहीं, SQL सर्वर में कोई पूर्वनिर्धारित फ़ंक्शन नहीं है जो किसी तालिका की "अंतिम पंक्ति" लौटाएगा।
परिभाषा के अनुसार, तालिका पंक्तियों का एक अनियंत्रित सेट है। कल्पना कीजिए कि आप एक बैग में कंचों का एक गुच्छा फेंकते हैं। अब थैला खोलो और किसी और से पूछो कि कौन सा संगमरमर पहले या आखिरी में गया। अब उन सभी को फर्श पर फेंक दो, और जब कोई और कमरे में आए, तो उनसे पूछें कि फर्श पर कौन पहले या आखिरी बार मारा। आप ऐसा नहीं कर सकते, क्योंकि ऐसी कोई अतिरिक्त जानकारी नहीं है जो उनके गिरने के क्रम के बारे में कुछ भी इंगित करती हो।
SQL सर्वर में किसी तालिका के लिए भी यही सच है। जब तक आप कोई पहचान कॉलम, या डेटाटाइम कॉलम, या ट्रिगर नहीं जोड़ते हैं, या बाहरी कार्यक्षमता जैसे परिवर्तन ट्रैकिंग, सीडीसी, ऑडिटिंग इत्यादि का उपयोग नहीं करते हैं, तब तक SQL सर्वर आपको यह बताने का कोई तरीका नहीं है कि कौन सी पंक्ति आखिरी बार डाली गई थी। आप सोच सकते हैं कि केवल खंड दिखता है . द्वारा आदेश के बिना तालिका से चयन करना जैसे यह सही क्रम में डेटा लौटा रहा है, यह शुद्ध संयोग है। यहां एक उदाहरण दिया गया है:
CREATE TABLE dbo.floobat
(
ID INT PRIMARY KEY,
n VARCHAR(16),
x CHAR(4000) NOT NULL DEFAULT ''
);
INSERT dbo.floobat(ID,n) VALUES(1,'Sparky');
INSERT dbo.floobat(ID,n) VALUES(2,'Aaron');
INSERT dbo.floobat(ID,n) VALUES(3,'Norbert'); -- <-- inserted last
SELECT ID, n FROM dbo.floobat;
ठीक है, तो डिफ़ॉल्ट रूप से, यह ठीक लगता है। परिणाम:
ID n
-- -------
1 Sparky
2 Aaron
3 Norbert -- < yes, this is right
हालांकि, आइए तालिका में एक बदलाव करें कि आपके आवेदन या उपरोक्त आदेश पर जो कुछ भी निर्भर करता है, उसके बारे में कोई जानकारी नहीं होगी:
CREATE NONCLUSTERED INDEX x ON dbo.floobat(n);
SELECT ID, n FROM dbo.floobat;
उह ओह! परिणाम:
ID n
-- -------
2 Aaron
3 Norbert
1 Sparky -- < oops, this is no longer right
आपको यह याद रखना होगा:यदि आप ORDER BY खंड शामिल नहीं करते हैं, तो आप बता रहे हैं SQL सर्वर जिसे आप ऑर्डर की परवाह नहीं करते हैं। तो यह डेटा वापस करने का सबसे कुशल तरीका खोजने जा रहा है, और इससे अलग-अलग देखे गए ऑर्डर हो सकते हैं। ऊपर दिए गए इंडेक्स को जोड़ने से SQL सर्वर को डेटा प्राप्त करने के लिए एक बेहतर एक्सेस पाथ मिला। यह अभी भी एक स्कैन का उपयोग करता था, लेकिन वह अनुक्रमणिका संकुल अनुक्रमणिका (जो एक पृष्ठ पर केवल दो पंक्तियों में फ़िट हो सकती थी) की तुलना में अधिक पतली थी।
अनुक्रमणिका के बिना भी, संभवतः आपको अपेक्षित परिणाम नहीं मिलेंगे, क्योंकि यह इस तथ्य से जटिल है कि आपका Cust_ID
कॉलम आरोही क्रम में नहीं डाला जा रहा है। तो अगर आप 5
डालते हैं और 2
. से , ORDER BY के बिना चयन करने का परिणाम वास्तव में 2
. होगा फिर 5
(यह मानते हुए कि कोई बेहतर सूचकांक मौजूद नहीं है)।
इंडेक्स बनाने (या छोड़ने, या बदलने, या पुनर्निर्माण) के अलावा अन्य चीजें व्यवहार के क्रम में उसी तरह के बदलाव का कारण बन सकती हैं। सर्विस पैक, मुद्रा या हॉटफिक्स लागू करें; प्रक्रिया कैश फ्लशिंग; विभिन्न RECOMPILE विकल्पों का उपयोग करना; अद्यतन आँकड़े; सर्वर को पुनरारंभ करना; ट्रेस ध्वज जोड़ना या अक्षम करना; सर्वर विकल्प विकल्प बदलना; डेटाबेस को किसी भिन्न सर्वर पर ले जाना; आदि आदि।
इसलिए, यदि आप इस जानकारी को ट्रैक करना चाहते हैं, तो आपको इसे किसी तरह स्वयं जोड़ना होगा, जैसा कि कई अन्य उत्तरों ने संबोधित किया है।