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

 

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

Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 24-05-2005, 18:42. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-05-2005, 13:57 2181

    Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Γεια σας παιδιά !!!!
    Πως μπορώ να αναφερθώ στο resultset ενός Select statement μέσα σε ένα sp ώστε να το χρησιμοποιήσω στην συνέχεια για να κάνω κάποιο άλλο ;



    Πάνος Αβραμίδης
  •  24-05-2005, 14:35 2186 σε απάντηση της 2181

    Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Πρέπει να χρησιμοποιήσεις cursors ή temporary πίνακα. Δεν μπορείς να περάσεις το resultset σε μια μεταβλητή και να του φερθείς σα να ήταν πίνακας.

    Αν θέλεις να το χρησιμοποιήσεις σαν πίνακα, ενσωμάτωσε το select στις εντολές που θέλεις να εκτελέσεις. Αν το χρησιμοποιείς συχνά, κάντο view. Μην ανησυχείς ότι ο SQL θα αναγκάζεται να κάνει πάλι και πάλι το ίδιο query. Αν έχεις ορίσει τα σωστά indexes, οι εντολές θα εκτελούνται πολύ γρήγορα, οπωσδήποτε γρηγορότερα από το αν χρησιμοποιούσες cursors ή temporary πίνακα. O optimizer του SQL Server σχεδόν πάντα κάνει καλύτερη δουλειά από τον προγραμματιστή.

    Στην σπάνια περίπτωση που δεν μπορείς να ενσωματώσεις το select στα άλλα query μπορείς να φτιάξεις ένα temporary πίνακα με την εντολή
    SELECT A, B, C
    INTO #MyTempTable
    WHERE ...

    Ο πίνακας αυτός θα παραμείνει όσο είσαι συνδεδεμένος

    Στην ΠΑΡΑ ΠΟΛΥ ΣΠΑΝΙΑ περίπτωση που πρέπει να εκτελέσεις περίπλοκο T-SQL κώδικα για κάθε row, θα πρέπει να χρησιμοποιήσεις cursor, με όλα τα προβλήματα που έχει αυτό (περίπλοκος προγραμματισμός, καθυστέρηση, κλείδωμα γραμμών). Σε αυτή την περίπτωση καλύτερα να εκτελέσεις τον κώδικα αυτό στον client.

    Και για να μη νομίσεις ότι υπερβάλλω, ή ότι δεν αξίζει να παλέψεις το query, σου λέω ότι η χρήση query αντί cursor μπορεί να μειώσει ένα procedure των 15 λεπτών ή της 1 ώρας στο 1 λεπτό. Ή και λιγότερο


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-05-2005, 14:51 2188 σε απάντηση της 2186

    Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Γειά σου συνονόματε !!!
    Πρέπει να περάσω και κάποια παράμετρο στο πρώτο Select ... Αν το έφτιαχνα ξεχωριστό procedure;


    Πάνος Αβραμίδης
  •  24-05-2005, 17:08 2190 σε απάντηση της 2188

    Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Το ξέρω οτι ο Παναγιώτης θα με...καθαρίσει με αυτό που θα σου πω, μια και απο performance δεν είναι ο,τι το καλύτερο, αλλά θα μπορούσες να χρησιμοποιήσεις μια table-valued function που να σου επιστρέφει το πρώτο resultset.

    Το πως το κάνεις φαίνεται παρακάτω (αντιγράφω από το books online):

    CREATE FUNCTION LargeOrderShippers ( @FreightParm money )
    RETURNS @OrderShipperTab TABLE
       (
        ShipperID     int,
        ShipperName   nvarchar(80),
        OrderID       int,
        ShippedDate   datetime,
        Freight       money
       )
    AS
    BEGIN
       INSERT @OrderShipperTab
            SELECT S.ShipperID, S.CompanyName,
                   O.OrderID, O.ShippedDate, O.Freight
            FROM Shippers AS S INNER JOIN Orders AS O
                  ON S.ShipperID = O.ShipVia
            WHERE O.Freight > @FreightParm
       RETURN
    END


    Μετά μπορείς να κάνεις π.χ.
    SELECT DISTINCT ShipperName FROM LargeOrderShippers(1500)

    Προσοχή: Το LargeOrderShippers είναι ακριβώς αυτό που ζητάς: Ενα resultset! Λειτουργεί με την ίδια λογική που λειτουργεί ένα view, μόνο που παίρνει παραμέτρους.

    Οπου στη θέση του 1500 θα μπορούσε να είναι κάποια variable που θα περνούσες είτε καλώντας το statement με τη μορφή stored procedure είτε υπολογίζοντάς το με βάση άλλα δεδομένα.

    Παναγιώτη, αν κάνω λάθος διορθώνεις ελεύθερα!


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-05-2005, 17:35 2191 σε απάντηση της 2190

    Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Γαβ, γαβ, γαβ! Δεν υπάρχει λόγος να φτιάξεις νέο πίνακα, μπορείς να επιστρέψεις το αποτέλεσμα αμέσως με inline-table function. Σε αυτή την περίπτωση ο optimizer θα αντικαταστήσει το κείμενο του query (όπως με ένα view) και θα χρησιμοποιήσει ό,τι indexes υπάρχουν.

     

    CREATE FUNCTION LargeOrderShippers( @FreightParm money )
    RETURNS TABLE
    AS
    RETURN
    (SELECT S.ShipperID, S.CompanyName, O.OrderID, O.ShippedDate, O.Freight FROM Shippers AS S INNER JOIN Orders AS O ON S.ShipperID = O.ShipVia WHERE O.Freight > @FreightParm)

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-05-2005, 17:39 2192 σε απάντηση της 2191

    Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Χαχα! Εγώ το είπα, ΑΝΤΙΓΡΑΦΩ από το BOL! Smile

    Τα χειρότερα δυνατά παραδείγματα Smile

    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-05-2005, 18:42 2195 σε απάντηση της 2192

    Yes [Y] Re: Πως θα αναφερθώ στο resultset ενός Select Statement μέσα σε ένα sp?

    Παιδιά σας ευχαριστώ θερμά !!!!!!


    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems