CRYPT_GEN_RANDOM странные эффекты

Я хочу случайным образом выбрать значение из небольшого диапазона целых чисел ( менее 200). В качестве альтернативы

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;

Я ожидал, что это вернет ровно одну строку с одинаковыми значениями обоих столбцов.

Однако он возвращает ноль, одну или несколько строк, при этом значения столбцов лишь изредка совпадают.

Есть идеи, что здесь происходит?

5
задан onedaywhen 22 September 2010 в 08:24
поделиться