2010-05-02 5 views
1

J'ai 4000 enregistrements, et je dois choisir 500 enregistrements aléatoires.Aide avec random - serveur sql 2008 requête

i besoin que 500 dossiers insérera à GoodTable

et le reste de 3500 dossiers insérera à BadTable

comment le faire en utilisant sql-server 2008 requête?

remercient à l'avance

Répondre

4

Cela devrait fonctionner dans Transact-SQL:

insert into GoodTable 
select top 500 * from OtherTable order by newid() 

EDIT: cela pourrait être mieux, il va créer l'GoodTable pour vous automatiquement (au lieu d'avoir besoin de créer manuellement au préalable avec les colonnes appropriées):

select top 500 * 
into GoodTable 
from OtherTable 
order by newid() 
+0

Etes-vous sûr que ce sera aléatoire? Cela dépend de la façon dont le moteur de recherche récupère les lignes TOP? Par exemple. pourrait-il aller chercher les mêmes 500 lignes à chaque fois, et les ré-ordonner juste à cause de l'ordre de tri aléatoire? Pour être totalement sûr que la sélection est aléatoire, ne serait-il pas plus sage d'utiliser une sous-requête pour assigner un newid à toutes les lignes de la table de base, et ensuite sélectionner le top 500 à partir de cela? – mdma

+1

C'est ce que 'order by newid()' fait déjà - il sélectionne le top 500 * après * la commande, ce qui est fait par un 'newid 'généré aléatoirement pour chaque ligne. Je l'ai utilisé moi-même sur SQL Server 2008, fonctionne très bien. Un moyen facile de vérifier: 'select top 1 * ... order by newid()' devrait vous obtenir une ligne différente à chaque fois. – tzaman