2012-10-17 2 views
3

Si utilisez l'instruction select:Sélectionnez Haut (n) et Supprimer haut (n) même?

select top (18) * from pippo; 

J'utilise l'instruction delete:

delete top (18) from pippo; 

Je voudrais savoir si les 18 lignes sélectionnées et supprimées sont les mêmes.
Une aide?

EDIT après avoir accepté la réponse:

J'ai trouvé l'ici solution suivante: Delete the 'first' record from a table in SQL Server, without a WHERE condition

WITH q AS 
     (
     SELECT TOP 18 * 
     FROM pippo 
     ORDER BY FIELD1 ASC /* You may want to add ORDER BY here */ 
     ) 
DELETE 
FROM q 

Avec cette solution, je sorte toute la table "pippo" par FIELD1, puis-je supprimer la 18 premières lignes.

+2

même si vous avez une clause 'ORDER BY', vous devez vous assurer qu'elle définit un ordre complet sur toutes les lignes, sinon elle sera encore mal définie (par exemple, s'il y a 50 lignes où a =' abc', alors 'top 18 ... order by a' pourrait choisir un autre 18 chaque fois) –

Répondre

6

Sans clause order by, il n'y a pas de commande garantie, donc non, ils ne sont pas garantis d'être identiques.

+1

Il pourrait également y avoir d'autres processus, en insérant ou en supprimant des données. Vous n'êtes donc jamais sûr de savoir quels enregistrements sont supprimés –

Questions connexes