SQL Server Random Sort

¿Cuál es la mejor manera de ordenar los resultados de una consulta SQL en un orden aleatorio dentro de un procedimiento almacenado?

Este es un duplicado de SO # 19412 . Aquí está la respuesta que di allí:

select top 1 * from mytable order by newid() 

En SQL Server 2005 en adelante, puede usar TABLESAMPLE para obtener una muestra aleatoria que sea repetible:

 SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ; 
 select foo from Bar order by newid() 

O use la siguiente consulta, que arroja un mejor resultado de muestra aleatoria:

 SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float) / CAST (0x7fffffff AS int) 

0.01 significa ~ 1 por ciento de las filas totales.

Cita de los Libros en pantalla de SQL 2008:

Si realmente desea una muestra aleatoria de filas individuales, modifique su consulta para filtrar las filas al azar, en lugar de usar TABLESAMPLE.

No puedes simplemente ORDER BY RAND (), como sabes, porque solo generará un valor. Entonces usa una clave para un valor inicial.

 SELECCIONAR RAND (object_id), object_id, name
   DESDE sys.objects
  PEDIDO POR 1