SQL सर्वर में, आप NEWSEQUENTIALID()
. का उपयोग कर सकते हैं वृद्धिशील अद्वितीय मान बनाने के लिए कार्य करें।
यह एक GUID (ग्लोबली यूनिक आइडेंटिफ़ायर) बनाता है जो ऑपरेटिंग सिस्टम के शुरू होने के बाद से किसी निर्दिष्ट कंप्यूटर पर इस फ़ंक्शन द्वारा पहले उत्पन्न किए गए किसी भी GUID से अधिक है। ऑपरेटिंग सिस्टम को फिर से शुरू करने के बाद, GUID कम रेंज से फिर से शुरू हो सकता है, लेकिन यह अभी भी विश्व स्तर पर अद्वितीय है।
NEWSEQUENTIALID()
फ़ंक्शन का उपयोग केवल DEFAULT
. के साथ किया जा सकता है अद्वितीय पहचानकर्ता . प्रकार के तालिका स्तंभों पर बाधाएं . इसलिए, आप केवल SELECT NEWSEQUENTIALID()
. जैसी क्वेरी नहीं चला सकते हैं और उम्मीद है कि यह काम करेगा (लेकिन आप कर सकते हैं ऐसा NEWID()
के साथ करें समारोह)।
उदाहरण 1 - एक डिफ़ॉल्ट मान के रूप में
यह कैसे काम करता है यह दिखाने के लिए यहां एक त्वरित उदाहरण दिया गया है:
USE Test; CREATE TABLE Prisoner ( PrisonerId uniqueidentifier NOT NULL DEFAULT NEWSEQUENTIALID(), PrisonerName varchar(70) NOT NULL, ); INSERT Prisoner (PrisonerName) VALUES ('Jerry Seinfeld'), ('George Costanza'), ('Elaine Benes'); SELECT * FROM Prisoner;
परिणाम:
+--------------------------------------+-----------------+ | PrisonerId | PrisonerName | |--------------------------------------+-----------------| | a46d433e-f36b-1410-8a80-007d2b533547 | Jerry Seinfeld | | aa6d433e-f36b-1410-8a80-007d2b533547 | George Costanza | | b06d433e-f36b-1410-8a80-007d2b533547 | Elaine Benes | +--------------------------------------+-----------------+
ध्यान दें कि GUID को DEFAULT
. के हिस्से के रूप में जेनरेट किया गया था मेज पर प्रतिबंध। वे स्पष्ट रूप से INSERT
. में प्रदान नहीं किए गए थे बयान।
उदाहरण 2 - INSERT कथन में स्पष्ट रूप से प्रदान किया गया
यदि आप NEWSEQUENTIALID()
. का उपयोग करने का प्रयास करते हैं तो यहां क्या होता है आपके INSERT
. में कथन:
INSERT Prisoner (PrisonerId, PrisonerName) VALUES (NEWSEQUENTIALID(), 'Kramer');
परिणाम:
Msg 302, Level 16, State 0, Line 1 The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.
तो इसे एक DEFAULT
. का हिस्सा होना चाहिए बाधा (पिछले उदाहरण की तरह)।
उपरोक्त डेटा सम्मिलित करने के लिए, हमें केवल INSERT
. से पहले कॉलम को हटाना होगा ऑपरेशन:
INSERT Prisoner (PrisonerName) VALUES ('Kramer'); SELECT * FROM Prisoner;
परिणाम:
+--------------------------------------+-----------------+ | PrisonerId | PrisonerName | |--------------------------------------+-----------------| | a46d433e-f36b-1410-8a80-007d2b533547 | Jerry Seinfeld | | aa6d433e-f36b-1410-8a80-007d2b533547 | George Costanza | | b06d433e-f36b-1410-8a80-007d2b533547 | Elaine Benes | | b76d433e-f36b-1410-8a80-007d2b533547 | Kramer | +--------------------------------------+-----------------+
उदाहरण 3 - एक SELECT स्टेटमेंट में इस्तेमाल किया गया
यदि आप इस फ़ंक्शन को मूल SELECT
. में उपयोग करने का प्रयास करते हैं तो आपको वही त्रुटि मिलेगी इस तरह का बयान:
SELECT NEWSEQUENTIALID();
परिणाम:
Msg 302, Level 16, State 0, Line 1 The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.
सुरक्षा/गोपनीयता
यह अनुशंसा की जाती है कि NEWSEQUENTIALID()
use का उपयोग न करें संवेदनशील डेटा के लिए, क्योंकि अगले जेनरेट किए गए GUID के मूल्य का अनुमान लगाना संभव है और इसलिए, उस GUID से जुड़े डेटा तक पहुंचें।