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

 

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

Table fields που χρησιμοποιούνται ως parameters σε stored procedure

Îåêßíçóå áðü ôï ìÝëïò skiabox. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 06-02-2008, 22:20. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-02-2008, 12:36 39833

    Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Εχει χρησιμοποιησει κανεις table fields ως parameters σε stored procedure?
    Ειναι λιγο εξειδικευμενο θεμα και δε βρισκω πολλα πραγματα στο google.
    Καθε βοηθεια ευπροσδεκτη!
    Ευχαριστω πολυ!
  •  04-02-2008, 12:40 39834 σε απάντηση της 39833

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Μπορείς να εξηγήσεις τι προσπαθείς να κάνεις;


    Vir prudens non contra ventum mingit
  •  04-02-2008, 13:01 39836 σε απάντηση της 39833

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Τί εννοείς? Δεν υπάρχει τίποτε το ιδιαίτερο στη χρήση table fields σε ένα stored procedure. Μήπως εννοείς να περάσεις το όνομα ενός table field σαν παράμετρο, για να κάνεις "δυναμικό" query? Αν εννοείς αυτό, έχει ξανασυζητηθεί αν και πριν από πάρα πολύ καιρό. Σαν ιδέα δεν είναι και τόσο καλή. Τα κύρια οφέλη ενός stored procedure είναι δύο:
    1) Κρύβει τις λεπτομέρειες της βάσης από τον κώδικα. Έτσι μπορεί ο DB administrator ή ο σχεδιαστής της βάσης να αλλάξει πίνακες, πεδία κλπ. ανάλογα με τις ανάγκες της βάσης χωρίς να "σκάσει" η εφαρμογή.
    2) Εκτελείται πιο γρήγορα γιατί ο SQL Server δημιουργεί ένα execution plan την πρώτη φορά που θα εκτελεστεί ένα stored procedure και το ξαναχρησιμοποιεί κάθε φορά που καλείται αυτό. Το execution plan είναι μία αλληλουχία ενεργειών όπως αναζήτηση βάση του Χ index, aggregation αυτών των δεδομένων κλπ, το οποίο εξαρτάται από τα πεδία που συμμετέχουν σε ένα query, τα indexes που υπάρχουν, την κατανομή των δεδομένων κλπ.

    Με αυτό που σκέφτεσαι χάνεις και τα δύο πλεονεκτήματα. Καταρχήν, ο κώδικας σου θα πρέπει να ξέρει ποιά είναι τα πεδία της βάσης για να τα περάσει στο stored procedure. Επιπλέον, το execution plan που θα εκτελεστεί για ένα σετ από πεδία μπορεί να είναι εντελώς ακατάλληλο για ένα άλλο σετ από πεδία.

    Συνήθως, ο λόγος που θέλει κάποιος να περάσει το όνομα του πεδίου ή ακόμα και του πίνακα σε ένα stored procedure είναι επειδή θέλει να φτιάξει queries για ad-hoc αναζητήσεις, όπου ο τελικός χρήστης επιλέγει τα χαρακτηριστικά που θέλει να ψάξει και τις αντίστοιχες τιμές. Σε αυτές τις περιπτώσεις είναι καλύτερο να φτιάξεις ένα parameterized query (ποτέ χύμα dynamic sql!) και να το εκτελέσεις απευθείας στη βάση. O SQL Server θα κρατήσει το execution plan του parameterized query στην cache και θα το ξαναχρησιμοποιήσει όταν κάποιος άλλος χρήστης κάνει ένα παρόμοιο query. Το μειονέκτημα είναι ότι αν αλλάξει το σχήμα της βάσης σου θα πρέπει να αλλάξει και ο κώδικας.
        Αν θέλεις να κρύψεις τις λεπτομέρειες της βάσης από τον κώδικα, μπορείς να φτιάξεις το string του parameterized query σε ένα stored procedure και να το εκτελέσεις με την sp_executesql. Το πρόβλημα εδώ είναι ότι η T-SQL δεν είναι και η καλύτερη γλώσσα για string manipulation. Θα χρειαστεί να γράψεις αρκετά περισσότερο κώδικα για να κάνεις ό,τι θα έκανες ίσως με μία String.Format στον client.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-02-2008, 13:09 39837 σε απάντηση της 39834

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Εχω ενα report φτιαγμενο σε crystal reports 10.
    Αυτο το report χρησιμοποιει καποια tables και ενα view.
    Επειδη το report ειναι για ξενοδοχειακη εφαρμογη εχω γκρουπαρει το report πρωτα με βαση αριθμο λογαριασμου και επειτα με βαση αριθμο δωματιου.
    Υπαρχει μια στηλη στο report που λεγεται arrangements.
    Η στηλη αυτη υπολογιζεται ως εξης :

    SELECT bedaposo
    FROM ErmisUser.QBEPROK
    WHERE QBEPROK.bedaflarr = '1'
    AND LEFT((QBEPROK.bedakind),1) <> 'P'


    οπου το QBEPROK ειναι το view.
    To grouping του report εχει γινει με βαση τον πινακα bereg και οπως αναφερω και πιο πανω εχει γινει πρωτα κατα bereg.berelog και μετα κατα bereg.bereroom.
    Οι αντιστοιχες στηλες στο QBEPROK view ειναι οι QBEPROK.bedalog και QBEPROK.tmpRm
    Θελω να φτιαξω μια stored procedure με βαση τον παραπανω code που να δεχεται ως παραμετρους τα berelog kai bereroom ετσι ωστε στο detail section του report να υπολογιζονται τα σωστα arrangements για καθε συνδιασμο λογαριασμου-δωματιου.
    Ευχαριστω πολυ για την αμεση απαντηση!
  •  04-02-2008, 13:51 39838 σε απάντηση της 39837

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Αν κατάλαβα ρωτάς πως να κάνεις αυτό? Τότε κοίτα το documentation του CREATE PROCEDURE για να δεις παραδείγματα.

    Create PROCEDURE MyProc(@berelog int, @bereroom int)
    AS
    SELECT bedaposo
    FROM ErmisUser.QBEPROK
    WHERE QBEPROK.bedaflarr = '1'
    AND LEFT((QBEPROK.bedakind),1) <> 'P'
    AND berelog=@berelog
    AND bereroom = @bereroom

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-02-2008, 14:04 39840 σε απάντηση της 39838

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Το δοκιμασα αλλα μου βγαζει λαθος.
    Τα bereg.berelog kai bereg.bereroom ανηκουν στον πινακα bereg και οχι στο view QBEPROK.
  •  04-02-2008, 14:14 39842 σε απάντηση της 39840

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Για να καταλαβεις τι θελω , θελω στην παρενθεση της πρωτης γραμμης να μπουν τα table fields και στα conditional AND να μπουν τα αναλογα columns του view.
    Δηλαδη :

    Create PROCEDURE MyProc(bereg.berelog, bereg.bereroom)
    AS
    SELECT bedaposo
    FROM ErmisUser.QBEPROK
    WHERE QBEPROK.bedaflarr = '1'
    AND LEFT((QBEPROK.bedakind),1) <> 'P'
    AND QBEPROK.bedalog = bereg.berelog
    AND QBEPROk.tmpRm = bereg.bereroom

  •  04-02-2008, 15:56 39844 σε απάντηση της 39842

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Αυτό που ζητάς δεν γίνεται. Βασικά δεν έχω καταλάβει τί ζητάς. Γιατί θέλεις να περάσεις το όνομα των πεδίων? Τί προσπαθείς να κάνεις? Join μεταξύ του view και του πίνακα? Κάτι άλλο?

    Θα πρέπει να περιγράψεις τί θέλεις να σου επιστρέψει το query και όχι πως νομίζεις ότι θα το πετύχεις. Να συνδυάσεις εγγραφές από δύο πίνακες? Να φιλτράρεις βάση κάποιων παραμέτρων που δίνει ο χρήστης? Κάτι άλλο? Υποψιάζομαι ότι δεν έχεις καταλάβει πως δουλεύουν τα joins και τα stored procedures αλλά δεν θα καταλάβω αν δεν μου πεις τί θέλεις να κάνει το query.
    Έχε επίσης υπόψη ότι δεν έχουμε υπόψη την εφαρμογή σου ούτε το σχήμα της βάσης σου.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-02-2008, 16:52 39899 σε απάντηση της 39844

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Βασικά απο οτι μου ειπε ενας τυπος σε ξενο forums αυτο που θελω να κανω γινεται μονο σε sql server 2008 ο οποιος βεβαια αργει ακομα να βγει σε final μορφή.
    Το προβλημα μου ειναι οτι πρεπει να φτιαξω καποια reports στη δουλεια και καποια πραγματα γινονται παρα πολυ δυσκολα σε crystal language ενω ισως να γινονται πιο ευκολα σε sql.
    Τα data τα παιρνω απο sql server 2005 βαση.
  •  06-02-2008, 22:20 39904 σε απάντηση της 39899

    Απ: Table fields που χρησιμοποιούνται ως parameters σε stored procedure

    Με όσα μας έχεις πει ως τώρα, αυτό που ζητάς δεν γίνεται ούτε σε 2008. Αλλά είμαι 100% σίγουρος ότι άλλο θέλεις να κάνεις και άλλο μας λες. Δεν υπάρχει κανένας λόγος να περάσεις τα ονόματα των πεδίων ως παραμέτρους, οπωσδήποτε όχι για να κάνεις κάτι που φαίνεται ότι θέλει απλά ένα join μεταξύ δύο πινάκων. Μέχρι να μας πεις τί πραγματικά θέλεις να κάνεις, όχι πως νομίζεις ότι θα υλοποιηθεί, δεν πρόκειται να βγάλουμε άκρη.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems