Usar RAND

La función RAND calcula un número aleatorio de punto flotante de 0 a 1, y puede tomar opcionalmente un valor tinyint, int o smallint para el punto de inicio del número aleatorio que se va a calcular.

El siguiente ejemplo calcula dos números aleatorios. La primera función RAND() permite a SQL Server elegir el valor de inicio y la segunda función RAND() usa el valor 3 para la posición de inicio.

SELECT RAND(), RAND(3);

La función RAND es un pseudogenerador de números aleatorios que opera de forma similar a la función rand de la biblioteca de tiempo de ejecución de C. Si no se proporciona el valor de inicio, el sistema generará sus propios valores variables. Si llama a RAND con un valor de inicio, debe usar valores de inicio variables para generar números aleatorios. Si llama a RAND varias veces con el mismo valor de inicio, devolverá el mismo valor generado. El siguiente script devuelve el mismo valor en las llamadas a RAND porque todas usan el mismo valor de inicio:

SELECT RAND(159784);
SELECT RAND(159784);
SELECT RAND(159784);

Una forma habitual de generar números aleatorios con RAND es incluir algo relativamente variable como valor de inicio, como, por ejemplo, agregar varias partes del resultado de GETDATE:

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) );

Cuando use un algoritmo basado en GETDATE para generar valores de inicio, RAND puede seguir generando valores duplicados si las llamadas a RAND se realizan en el intervalo de la parte menor de la fecha usada en el algoritmo. Esto es lo que ocurre con más probabilidad cuando las llamadas a RAND se incluyen en un único lote. En el mismo milisegundo se pueden ejecutar múltiples llamadas a RAND en un único lote Se trata del incremento más pequeño de DATEPART. En este caso, incorpore un valor basado en algo diferente al tiempo para generar los valores de inicio.