Tôi muốn chọn ngẫu nhiên một giá trị từ một phạm vi nhỏ các số nguyên (nhỏ hơn 200). Để thay thế choCRYPT_GEN_RANDOM hiệu ứng lạ
SELECT RAND()
Tôi đang cố gắng sử dụng
CAST(CAST(CRYPT_GEN_RANDOM(2) AS INTEGER) AS FLOAT)/65535
nhưng tôi nhận được một số hiệu ứng lạ.
Ví dụ:
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;
tôi mong đợi này để trả lại chính xác một hàng với cả hai giá trị cột bằng nhau.
Tuy nhiên, nó trả về 0, một hoặc nhiều hàng, với các giá trị cột chỉ thỉnh thoảng bằng nhau.
Bất kỳ ý tưởng những gì đang xảy ra ở đây?
Đổi tên thành con mèo của Schrödinger hoặc Nguyên tắc không chắc chắn trong Sql Server! hahah –
[Đã viết blog về điều này tại đây] (http://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression). –