Το τελευταίο Newsletter του SQL Server Central έχει ως featured άρθρο το "Conditional Statements in Where Clauses" του cap. Περιγράφει τη χρήση του Case σε Where statements για να αποφευχθεί η δημιουργία δυναμικού SQL όταν θέλουμε να έχουμε παραμέτρους αναζήτησεις που θα ορίζει ο χρήστης. Με τον τρόπο αυτό μπορεί κάποιος να έχει ένα Stored procedure το οποίο θα εκτελεί διαφορετικό WHERE ανάλογα με τις παραμέτρους που περνάει ο χρήστης.
Την τεχνική αυτή χρησιμοποιούσα και εγώ για αρκετά χρόνια, μέχρι που διαπίστωσα ότι ο SQL Server χρησιμοποιεί πάντα το ίδιο execution plan για κάθε stored procedure: Αυτό που δημιουργήθηκε την πρώτη φορά που εκτελέστηκε το stored procedure. Αν μετά το stored procedure εκτελεστεί με διαφορετικές παραμέτρους, θα χρησιμοποιηθεί το ίδιο execution plan άσχετα από το αν είναι κατάλληλο ή όχι. Περιμένετε όμως!
Το άρθρο είναι σχετικά παλιό, του 2004. Με την αναδημοσίευση του σήμερα, ξεκίνησε ξανά η κουβέντα που είχε σταματήσει πριν από 3 χρόνια, με τις τεχνικές που ξέρουμε σήμερα. Για δείτε το Dynamic Search Conditions του Erland Sommarskog και ειδικά την ενότητα "x=@x and @x IS NOT NULL".
Όπως φαίνεται σε αυτή την περίπτωση το statetment εκτελείται με πολύ καλό performance!
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos