Chcę losowo wybrać wartość z małego zakresu liczb całkowitych (mniej niż 200). Jako alternatywę dlaCRYPT_GEN_RANDOM dziwne efekty
SELECT RAND()
Próbuję użyć
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT)/65535
ale Dostaję jakieś dziwne efekty.
Na przykład:
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;
będę oczekiwać tego, aby powrócić dokładnie jeden wiersz z obu wartości kolumn równych.
Jednakże zwraca zero, jeden lub więcej wierszy, przy czym wartości kolumn są tylko czasami równe.
Masz pojęcie, co się tutaj dzieje?
Zmień nazwę jako kota Schrödingera lub zasadę niepewności na serwerze Sql! hahah –
[Blogged about this here] (http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression). –