Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Registro aleatório de uma tabela de banco de dados (T-SQL)


Existe uma maneira sucinta de recuperar um registro aleatório de uma tabela do sql server?

Sim
SELECT TOP 1 * FROM table ORDER BY NEWID()

Explicação


Um NEWID() é gerado para cada linha e a tabela é então classificada por ela. O primeiro registro é retornado (ou seja, o registro com o GUID "mais baixo").

Observações


  1. GUIDs são gerados como números pseudo-aleatórios desde a versão quatro:

    A versão 4 UUID destina-se a gerar UUIDs a partir de números ou pseudo-aleatórios verdadeiramente aleatórios.

    O algoritmo é o seguinte:
    • Defina os dois bits mais significativos (bits 6 e 7) de theclock_seq_hi_and_reserved como zero e um, respectivamente.
    • Defina os quatro bits mais significativos (bits 12 a 15) do campo time_hi_and_version para o número da versão de 4 bits da Seção 4.1.3.
    • Defina todos os outros bits para valores escolhidos aleatoriamente (ou pseudo-aleatoriamente).

    —Um namespace URN de identificador universalmente exclusivo (UUID) - RFC 4122

  2. A alternativa SELECT TOP 1 * FROM table ORDER BY RAND() não funcionará como se poderia pensar. RAND() retorna um único valor por consulta, portanto, todas as linhas compartilharão o mesmo valor.

  3. Embora os valores GUID sejam pseudo-aleatórios, você precisará de um PRNG melhor para os aplicativos mais exigentes.

  4. O desempenho típico é inferior a 10 segundos para cerca de 1.000.000 de linhas - é claro, dependendo do sistema. Observe que é impossível atingir um índice, portanto, o desempenho será relativamente limitado.