Ordinamento casuale di SQL Server

Qual è il modo migliore per ordinare i risultati di una query sql in un ordine casuale all’interno di una stored procedure?

Questo è un duplicato di SO # 19412 . Ecco la risposta che ho dato qui:

select top 1 * from mytable order by newid() 

In SQL Server 2005 e versioni successive, è ansible utilizzare TABLESAMPLE per ottenere un campione casuale ripetibile:

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

Oppure utilizzare la seguente query, che restituisce un risultato di esempio casuale migliore:

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

0.01 significa ~ 1 percento delle righe totali.

Citazione dalla documentazione online di SQL 2008:

Se vuoi veramente un campione casuale di singole righe, modifica la query per filtrare le righe casualmente, invece di usare TABLESAMPLE.

Non puoi semplicemente ORDER BY RAND (), come sai, perché genererà solo un valore. Quindi usa una chiave per un valore di seme.

 SELECT RAND (object_id), object_id, name
   DA sys.objects
  ORDINE DI 1