Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

Îåêßíçóå áðü ôï ìÝëïò imanos. Τελευταία δημοσίευση από το μέλος imanos στις 07-02-2006, 12:05. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-01-2006, 02:15 9014

    Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Παράδειγμα στην βάση pubs

    SELECT emp_id,lname,fname FROM employee LIMIT 20,10

    Το παραπάνω query μας λέει ότι πρέπει νά μας επιστρέψει 10 εγγραφές αρχίζωντας από τη θέση 21

    Νά ένας τρόπος για να πάρουμε στον SQL Server το παραπάνω query χωρίς την δημιουργία και τον πονοκέφαλο μιας sp

     

    select * from (
     select top 10 emp_id,lname,fname from (
        select top 30 emp_id,lname,fname
        from employee
       order by lname asc
     ) as tbl_1 order by lname desc
    ) as tbl_2 order by lname asc


    Ιωάννης Μανουσάκης
  •  30-01-2006, 10:46 9015 σε απάντηση της 9014

    Απ: Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Μήπως είναι λίγο βαρύ αυτό; Sort και κόντρα ανάποδο sort...
    Χρήστος Γεωργακόπουλος
  •  30-01-2006, 11:10 9016 σε απάντηση της 9014

    Απ: Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Δέν το νομίζω το έχω δοκιμάσει σέ πίνακα μέ αρκετές χιλιάδες εγγραφές.

    Και νομίζω ότι είναι βοηθάει σε web based εφορμογές όταν θέλουμε νά κανουμε paging(Σελιδοποίηση 1,2,3...).
    Αν έχεις κάτι καλλύτερο να προτείνεις ευπρόσδεκτο.
    Ιωάννης Μανουσάκης
  •  30-01-2006, 11:30 9017 σε απάντηση της 9016

    Απ: Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Όντως, τώρα που το ξαναβλέπω, πρώτα περιορίζεις τις εγγραφές στο μέγεθος του page σου, οπότε τα επόμενα sorts γίνονται σε πολύ λίγες εγγραφές. Γράψε λάθος...
    Χρήστος Γεωργακόπουλος
  •  07-02-2006, 02:17 9335 σε απάντηση της 9016

    Απ: Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Τη συζήτηση αυτή την είχαμε πριν από λίγο καιρό στο Custom Paging with Stored Procedures. Εκεί αναφέρονται 3-4 διαφορετικές λύσεις οι οποίες προέρχονται από βιβλία και blogs από SQL Server MVPs. Η απλή λύση με το TOP n είναι χρήσιμη μόνο αν χρησιμοποιεί κανείς δυναμική sql ή δεν χρειάζεται να περάσει παραμέτρους για τον αριθμό της σελίδας. Για το λόγο αυτό δεν είναι και τόσο καλή για paging. Από την άλλη, η λύση που προτείνει ο Aaron Bertrand στο "How do I page a recordset?" είναι ένα έτοιμο stored procedure και το μόνο που χρειάζεται είναι να του περάσεις τον αριθμό σελίδας και τον αριθμό των εγγραφών ανά σελίδα. Σε κάθε περίπτωση, η χρήση δυναμικής sql μπορεί να φαίνεται ευκολότερη αλλά δημιουργεί πολύ μεγαλύτερα προβλήματα επιδόσεων και ασφάλειας, ειδικά σε σε web εφαρμογές.

    Η κατάσταση γίνεται πιο εύκολη πάντως στον SQL Server 2005 ο οποίος επιτρέπει τη χρήση παραμέτρων στο TOP και συναρτήσεις όπως το ROW_NUMBER. Ο Aaron Bertrand πάλι περιγράφει μία λύση με το ROW_NUMBER και μία με το καινούριο TOP στο "Why is there still no LIMIT clause?" 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-02-2006, 12:05 9339 σε απάντηση της 9014

    Απ: Πώς μπορούμε νά πάρουμε ένα LIMIT CLAUSE στον SQL SERVER όπως στην MySQL ή Oracle

    Αγαπητέ Παναγιώτη.
    To Query που έδωσα σάν παράδειγμα όχι με την μορφή που είναι θά μπορούσε νά δημιουργηθεί μέ δυναμική SQL μέσα σε μιά sp όπου θα δέχεται σάν παράμετρο τον αριθμό της σελίδας και τον αριθμό των γραμμών ανά σελίδα.
    Τέλος δεν αναφερόμουν στον SQL2005 που όπως σωστά αναφέρεις υπάρχει και η συνάρτηση ROW_NUMBER.
    Επίσης πολύ καλά έκανες και αναφέρεις τα παραπάνω ,άλλωστε αυτός είναι ο σκοπός του site να ανταλάσσουμε απόψεις να βελτιωνόμαστε και να μαθαίνουμε .
    Ιωάννης Μανουσάκης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems