मैं यादृच्छिक रूप से पूर्णांक की एक छोटी श्रृंखला (200 से कम) से एक मान चुनना चाहता हूं।CRYPT_GEN_RANDOM अजीब प्रभाव
SELECT RAND()
के लिए एक विकल्प के रूप में मैं
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT)/65535
उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं कुछ अजीब प्रभाव हो रही है।
उदाहरण के लिए:
WITH Numbers (num)
AS
(
SELECT num
FROM (
VALUES (1), (2), (3), (4),
(5), (6), (7), (8),
(9), (10)
) AS Numbers (num)
),
RandomNumber (num)
AS
(
SELECT CAST(
(CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT)/65535)
* (SELECT COUNT(*) FROM Numbers) + 1
AS INTEGER
)
)
SELECT T1.num, R1.num
FROM Numbers AS T1
INNER JOIN RandomNumber AS R1
ON T1.num = R1.num;
मैं इस बराबर दोनों स्तंभ मान के साथ वास्तव में एक पंक्ति वापस जाने के लिए उम्मीद थी।
हालांकि, यह शून्य, एक या अधिक पंक्तियां देता है, कॉलम मान केवल कभी-कभी बराबर होते हैं।
कोई विचार क्या हो रहा है?
इसे एसक्यूएल सर्वर में श्रोडिंगर की बिल्ली या अनिश्चितता सिद्धांत के रूप में नामित करें! हाहा –
[यहां इस बारे में ब्लॉग किया गया है] (http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression)। –