Τώρα το κατάλαβα καλυτερα. Αρχικά νόμισα οτι είχε άμεση σύνδεση με το παράδειγμα που είχες δώσει.
Ενας απλός τρόπος για να δημιουργήσεις μια stored procedure με μεταβλητό αριθμο παραμέτρων είναι ουσιαστικά να δημιουργήσεις μια stored procedure που να δέχεται ΜΙΑ παράμετρο η οποία θα ειναι τύπου varchar (με μεγάλο μήκος, π.χ. varchar(8000)) και η οποία θα περιέχει ένα delimited list (comma-delimited ή με άλλο delimeter)
Στη συνέχεια, μπορείς με διάφορους τρόπους (θα ψάξω να σου βρω έναν από αυτούς) να "σπάσεις" το list αυτό στα συστατικά του στοιχεία και, αν χρειάζεται, να κάνεις convert τα στοιχεία αυτά στο σωστό data type. Μπορείς στη συνέχεια τα στοιχεία αυτά να τα "περάσεις" σε ένα table variable (in-memory table) ή ακόμα και σε ένα temporary table και στη συνέχεια να τα χρησιμοποιήσεις μέσα στην stored procedure σου όπως εσύ κρίνεις καλύτερα.
Γνωστοί περιορισμοί σε αυτή την προσέγγιση:
- Δεν έχεις καλό parameter checking. Αν η stored procedure σου περιμένει αριθμούς σαν ορίσματα και εσύ δώσεις σε ένα στοιχείο της λίστας χαρακτήρες, θα "χτυπήσει" κατά την εκτέλεση και όχι κατά την κλήση.
- Το μήκος των 8000 χαρακτήρων (max μήκος μεταβλητών varchar) αποτελεί από μόνο του ένα περιορισμό αν θέλεις να περάσεις εξαιρετικα μεγάλο αριθμό παραμέτρων.
- Θέλει λίγο περισσότερο κώδικα εσωτερικά στην stored procedure για να "διαχωρίσεις" τα στοιχεία, ή εναλλακτικά απαιτεί τη δημιουργία κάποιας user defined function / δευτερεύουσας stored procedure που θα κάνει αυτή τη δουλειά.
Σωτήρης Φιλιππίδης
DotSee Web Services