sql - Generate unique random integer in database column -


मेरा अनुप्रयोग कूपन बनाता है, जिसे प्रत्येक को एक अद्वितीय बारकोड संख्या की आवश्यकता होती है। यह नंबर एक सकारात्मक पूर्णांक होना चाहिए और 6-12 अंकों के बीच होना चाहिए। यह संख्या एक अद्वितीय कूपन का प्रतिनिधित्व करती है, इसलिए यह संख्या अद्वितीय होना चाहिए। मैं केवल 1 के द्वारा बारकोड संख्या में वृद्धि नहीं कर सकता, क्योंकि यह हैकरों को अन्य कूपन बारकोडों को अनुमान लगाने में आसान बनाता है।

अगर मेरे पास एक कूपन डीबी तालिका है, तो मैं यह यादृच्छिक बारकोड नंबर कैसे बना सकता हूं विशिष्ट विशिष्टता की गारंटी क्या है?

यह आपको 12 अंक तक की एक यादृच्छिक संख्या देगा, बहुत कम टक्कर के साथ

  select -convert (bigint, convert (varbinary (max), newid ())% 1000000000000   

आपको परीक्षण और टकराव की उपेक्षा करने की आवश्यकता है साथ ही साथ उन अंकों को छोड़ दें जो 6 अंकों से भी कम हैं।

संपादित करें

सबसे कम लंबाई का उपयोग करने के लिए पहले, आप नहीं होंगे वास्तव में यादृच्छिक संख्या जनरेटर का उपयोग करने में सक्षम। इसका कारण यह है कि एक बार जब आप 6 अंकों की रेंज में 95% तक पहुंच जाते हैं, तो टकराव इतनी ऊंची होगी कि इस कार्यक्रम में अपना एक अनूठा नंबर प्राप्त करने का प्रयास करने और फिर से प्रयास करने का प्रयास किया जायेगा जो कि अभी तक उपयोग नहीं किया गया है। एक बार जब आप केवल एक ही नंबर शेष रहते हैं, तो प्रोग्राम हमेशा के लिए इंतजार कर सकता है और उस नंबर को "उत्पन्न" न करें। तो, "सबसे कम लंबाई पहले" पूरा करने के लिए आपको वास्तव में सभी नंबरों को एक तालिका में बनाना होगा और फिर पंक्ति संख्या ( लेन (नं) द्वारा क्रम, न्यूआईड () ) उन्हें बेतरतीब ढंग से, फिर क्रमिक रूप से उन्हें आकर्षित करना होगा

0-पैड से 12 अंकों का उपयोग करें

  का चयन करें सही ('000000000000' + सही (-कन्वर्ट (बिल्टीन्ट, कन्वर्ट (वर्बलरी (मैक्स), न्यूइड ())), 12), 12)    

Comments