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

 

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

Διαχειριση Null τιμων σε Stored Procedures

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

    Διαχειριση Null τιμων σε Stored Procedures

    Εχω ενα Query που επιστρεφει Null τιμες σε stored proceudres στον Sql server 2000 και θελω να τις ελεγχω στον sql server και να τις αντικαταστισω με κατι αλλο πριν να γεμισω το dataset μου με τις τιμες που θα επιστρεψει.Μπορει να γινει, και αν ναι πως.

    Επισης ξερετε καποιο καλο site για αρχαριους σε stored procedures ή κανα καλο αρθρo;

    Ευχαριστω

  •  26-05-2006, 10:42 13352 σε απάντηση της 13348

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    Στην PL-SQL υπάρχει η μέθοδος IsNULL, η οποία αντικαθιστά μια NULL τιμή με αυτή που θα δώσεις, π.χ. :

    SELECT title, type, ISNULL(price, 0.00) AS price
    FROM titles


    Το τμήμα αυτό, αν το column price είναι NULL το αντικαθιστά με 0.00. Το παράδειγμα είναι από τα Books Online τα οποία συνιστώ ανεπιφύλακτα για reference. Όσο για site ή άρθρα, νομίζω ότι οι υπόλοιποι μπορούν να δώσουν καλύτερα στοιχεία, αν και πάντα την καλύτερη λύση θα την δώσει το ... Google Smile [:)]

    Στερνή μου γνώση να σε είχα πρώτα...
  •  26-05-2006, 12:19 13356 σε απάντηση της 13348

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    ευχαριστω.ειναι το ιδιο και για T-SQL
  •  26-05-2006, 13:08 13357 σε απάντηση της 13348

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    Υπάρχει και η: COALESCE(fieldname, 0.00)
  •  27-05-2006, 05:57 13383 σε απάντηση της 13357

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    Υπάρχει και η: Case When .... Then ... Else .... End
    while (!dead) learn();
  •  27-05-2006, 16:46 13395 σε απάντηση της 13348

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    Εξαρτάται τί προσπαθείς να κάνεις. Και οι δύο λύσεις είναι καλές για διαφορετικές χρήσεις.
    Η COALESCE σου επιτρέπει να επιστρέψεις μια δικιά σου τιμή όταν το πεδίο που ελέγχεις είναι NULL. Αυτό είναι πολύ χρήσιμο σε ένα SELECT για να επιστρέψεις μια default τιμή όταν το πεδίο που επιστρέφεις περιέχει NULLs:
     SELECT CustomerName, ISNULL(Address, 'Unknown Address') From Customer


    Η ISNULLχρειάζεται προσοχή όμως όταν τη χρησιμοποιείς στο WHERE. Αν την εφαρμόσεις επάνω στο πεδίο που θέλεις να ψάξεις, η βάση δεν θα μπορέσει να εκμεταλλευτεί τα indexes που περιλαμβάνουν το συγκεκριμένο πεδίο. Αν, για παράδειγμα, γράψεις:
     SELECT CustomerName FROM Customer WHERE ISNULL(City,'Unknown City')=@CityParam AND Country=@CountryParam

    η βάση θα πιάσει μία-μία τις εγγραφές που έχουν Country=@CountryParam και θα κάνει τον έλεγχο ISNULL(City,'Unknown City')=@CityParam . Άουτς!


    Αντί για την COALESCE σε αυτή την περίπτωση θα ήταν καλύτερο να γράψεις 


     SELECT CustomerName FROM Customer WHERE (City=@CityParam OR (City IS NULL AND @CityParam IS NULL)) AND Country=@CountryParam

    Ο λόγος για τον διπλό έλεγχο των NULL είναι ότι ένα NULL ΔΕΝ είναι ποτέ ίσο με NULL! Αυτό είναι μία από τις παραξενιές της SQL, όχι μόνο του SQL Server. Οποιαδήποτε σύγκριση γίνεται με NULL πρέπει να επιστρέφει NULL!

    Η CASE WHEN ... είναι μία άλλη επιλογή που σου επιτρέπει να κάνεις πολύ περισσότερα πράγματα. Το πρώτο statement θα μπορούσε να γραφτεί ως εξής:


     SELECT CustomerName, CASE
        WHEN Address IS NULL THEN 'Unknown Address'
        ELSE Address
            END CASE
     FROM Customer

    Αρχικά φαίνεται ότι γράφεις πολύ περισσότερο κώδικα από πριν. Από την άλλη, μπορείς να προσθέσεις πολλούς ελέγχους στο WHEN, όχι μόνο τον έλεγχο για NULL. Θα μπορούσες π.χ. να ελέγχεις περισσότερα από ένα πεδία για NULL και να επιστρέφεις κάποιο συνδυασμό τους.

    Η COALESCE συμπεριφέρεται περίπου όπως η ISNULL, με τη διαφορά ότι δέχεται σαν παραμέτρους πολλά πεδία και επιστρέφει το πρώτο από αυτά που περιέχει τιμή.

    Resources τώρα. Η πρώτη πηγή σου θα πρέπει να είναι το documentation του SQL Server. Έχει πολύ καλεί δομή και αναλυτικές περιγραφές. Αν θέλεις κάτι στα γρήγορα, υπάρχει και το http://www.sqlserverdirectory.com/sqlserver_articles.htm . Ίσως να σε ενδιαφέρει και το "How to share data between stored procedures" του Erland Sommarskog.  Άλλο φοβερό blog είναι της Kimberly Tripp, "Improving *my* SQL skills through your questions". Η Tripp είναι μια από τις καλύτερες πηγές για θέματα SQL Server γενικά, και πολύ καλή ομιλήτρια! Άλλη καλή πηγή είναι ο Itzik Ben-Gan, ο οποίος γράφει κάθε μήνα και στο SQL Server Magazine. Το οποίο είναι επίσης μια πολύ καλή πηγή. Είναι μάλιστα ένα από τα ελάχιστα επαγγελματικά περιοδικά που φέρνει ακόμα ο Παπασωτηρίου, οπότε μπορείς να το προμηθευτείς εύκολα.

    Τέλος υπάρχει και το SQL Server Worldwide Users Group το οποίο έχει άπειρα άρθρα και forums για SQL Server, Oracle, DB2, MySQL. Όλως "τυχαίως" εκεί θα βρεις και όσους ανέφερα παραπάνω.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-05-2006, 10:13 13434 σε απάντηση της 13348

    Απ: Διαχειριση Null τιμων σε Stored Procedures

    Σας ευχαριστω για την βοηθεια σας.

    το τι προσπαθω να κανω ειναι να ελεγχω αν ειναι Null και αν ειναι το αντικαταστω με τιμη καποιου αλλου πεδιου που πρεπει να πω οτι το ISNULL δουλεψε :)
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems