El otro día seme planteó el siguiente problema: ¿cómo puedo hacer para obtener con una consulta SQL un número 'N' de registros elegidos aleatoriamente dentro de una tabla con miles de registros?

En SQL Server hay, por lo menos, dos formas de hacerlo.

- Consulta 1: la complicada

SELECT TOP N * FROM Nombre_Tabla ORDER BY RAND( (@@IDLE % IDENTITYCOL ) + DATEPART( ms , CURRENT_TIMESTAMP )  + IDENTITYCOL)

De este modo se devuelven N identificadores de la tabla elegidos aleatoriamente. Lo que hace es coger un valor aleatorio en cada "vuelta" para un valor autonumérico que actúa como clave primaria de la tabla. Esto no es problema casi nunca ya que la mayor parte de las tablas suelen poseer un campo de este tipo. Sin embargo...

- Consulta 2: más sencilla y genérica

SELECT TOP N * FROM Nombre_Tabla ORDER BY NewID()

Este método como se ve no presupone nada y sirve incluso para tablas sin clave primaria y para consultas cruzadas con otras tablas.

Interesante ¿verdad?

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor