SQL सर्वर पर एक नज़र डालें - आधारित रैंडम नंबर सेट करें जिसमें बहुत विस्तृत विवरण है।
संक्षेप में, निम्नलिखित कोड एक समान वितरण के साथ 0 और 13 के बीच एक यादृच्छिक संख्या उत्पन्न करता है:
ABS(CHECKSUM(NewId())) % 14
अपनी सीमा बदलने के लिए, अभिव्यक्ति के अंत में बस संख्या को बदलें। अतिरिक्त सावधानी बरतें यदि आपको एक ऐसी सीमा की आवश्यकता है जिसमें सकारात्मक और नकारात्मक दोनों संख्याएँ शामिल हैं। यदि आप इसे गलत करते हैं, तो संख्या 0 को दोगुना करना संभव है।
कमरे में गणित पागल के लिए एक छोटी सी चेतावनी: इस कोड में बहुत मामूली पूर्वाग्रह है। CHECKSUM()
उन संख्याओं में परिणाम जो sql Int डेटाटाइप की पूरी रेंज में समान हैं, या कम से कम इतना निकट है जितना कि मेरा (संपादक) परीक्षण दिखा सकता है। हालाँकि, कुछ पूर्वाग्रह होंगे जब CHECKSUM () उस श्रेणी के बहुत ऊपरी छोर पर एक संख्या का उत्पादन करता है। किसी भी समय आपको अधिकतम संभव पूर्णांक और अपनी इच्छित श्रेणी के आकार के अंतिम सटीक एकाधिक (इस मामले में 14) के बीच एक संख्या मिलती है, इससे पहले कि अधिकतम पूर्णांक, वे परिणाम आपकी सीमा के शेष भाग के पक्ष में होते हैं, जिनसे उत्पादन नहीं किया जा सकता है 14 के पिछले कई।
एक उदाहरण के रूप में, कल्पना करें कि इंट की पूरी रेंज केवल 19 है। 19 सबसे बड़ा संभव पूर्णांक है जिसे आप पकड़ सकते हैं। जब CHECKSUM () 14-19 में परिणाम होता है, तो ये परिणाम 0-5 के अनुरूप होते हैं। उन संख्याओं की जाएगी भारी , 6-13 से अधिक इष्ट क्योंकि अंततः () दो बार के रूप में उन्हें उत्पन्न करने के लिए की संभावना है। यह नेत्रहीन प्रदर्शित करना आसान है। नीचे हमारी काल्पनिक पूर्णांक श्रेणी के लिए परिणामों का पूरा संभव सेट दिया गया है:
चेकसम इंटेगर: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
रेंज रिजल्ट: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 2 3 4 5
आप यहां देख सकते हैं कि दूसरों की तुलना में कुछ संख्याओं का उत्पादन करने की अधिक संभावना है: पूर्वाग्रह। शुक्र है, इंट प्रकार की वास्तविक सीमा बहुत अधिक है बड़ी है ... इतना अधिक है कि ज्यादातर मामलों में पूर्वाग्रह लगभग undetectable है। हालाँकि, यदि आप कभी भी अपने आप को गंभीर सुरक्षा कोड के लिए ऐसा करते हुए पाते हैं, तो यह जागरूक होना चाहिए।