मैं एसक्यूएल सर्वर 2012T-SQL प्रकरण बयान अजीब व्यवहार
उपयोग कर रहा हूँ मैं रेंज में यादृच्छिक-ish नंबरों की सूची प्राप्त करने के लिए [1,3 निम्नलिखित करते हैं ], यह ठीक काम करता है:
SELECT TOP 100
ABS(CHECKSUM(NEWID()))%3 + 1 [value_of_rand]
FROM sys.objects
और मुझे इस तरह की अच्छी चीजें मिलती हैं (सभी 1 और 3 के बीच)।
3
2
2
2
1
....etc.
लेकिन अगर मैं तो एक मामला बयान में है कि एक ही श्रृंखलित यादृच्छिक-मूल्य फ़ंक्शन के परिणाम में कहें, यह जाहिरा तौर पर केवल मूल्यों 1,2,3 का उत्पादन नहीं करता।
SELECT TOP 100
CASE (ABS(CHECKSUM(NEWID()))%3 + 1)
WHEN 1
THEN 'one'
WHEN 2
THEN 'two'
WHEN 3
THEN 'three'
ELSE
'that is strange'
END [value_of_case]
FROM sys.objects
यह आउटपुट:
three
that is strange
that is strange
one
two
...etc
क्या मैं गलत यहाँ कर रहा हूँ?
यह हो सकता है कि ऐसा नहीं है जब नंबर पेश इसे गोलाई है, लेकिन जब मूल्यांकन कर? इसे एक चर और डिबगिंग/उस मूल्य को फेंकने का प्रयास करें जहां आपके पास "अजीब है"। – Dane
यदि मैं इसे एक चर के लिए असाइन करता हूं और फिर उस चर के विरुद्ध केस स्टेटमेंट करता हूं, तो यह ठीक काम करता है, कोई अजीबता नहीं। हालांकि, मुझे लगता है कि इसे डिबग करने की आपकी विधि संभव नहीं है। मुझे यह कहते हुए एक त्रुटि मिलती है कि "एक चयन कथन जो एक चर को मान निर्दिष्ट करता है उसे डेटा-पुनर्प्राप्ति संचालन के साथ जोड़ा जाना चाहिए।" अगर मैं ऐसा कुछ करने की कोशिश करता हूं: DECLARE @a int; @ ए = (एबीएस (चेकसम (न्यूड()))% 3 + 1), केस @ ए \t जब 1 फिर 'एक' कब 2 'दो' \t जब 3 'तीन' \t ईएलएसई अजीब: '+ कास्ट (@a वर्चर (अधिकतम)) END – Anssssss
आप हमेशा पूरे 'WHEN 3' मामले को हटा सकते हैं और' ईएलएसई ' –