Πρέπει να χρησιμοποιήσεις 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