
Έχετε δει ποτέ κάποιο από τα μηνύματα λάθους εκεί;



> 
> - SQL Server 2000
> 
> 
> Δεν είναι δυνατή η διάθεση βοηθητικές πίνακα για προβολή ή την ανάλυση της λειτουργίας.   
> 
>  Έγινε υπέρβαση του μέγιστου αριθμού των πινάκων σε ένα ερώτημα (256).
> 
> 
> - SQL Server 2005
> 
> 
> Πάρα πολλά ονόματα πίνακα στο ερώτημα. Η μέγιστη επιτρεπόμενη είναι 256.
> 
> 
> 


Αν ναι, τι έχετε κάνει;


Παραιτηθεί; Έπεισε τον πελάτη να απλοποιήσει τα αιτήματά τους; Απομαλοποιείται τη βάση δεδομένων;




---


@ (Όλοι μου θέλει να τοποθετήσει το ερώτημα):


1. Δεν είμαι σίγουρος αν μπορώ να επικολλήσετε 70 kilobytes κώδικα στο παράθυρο επεξεργασίας απάντηση.
2. Ακόμα κι αν μπορεί αυτό δεν θα βοηθήσει αφού αυτό το 70 kilobytes κώδικα θα αναφοράς 20 ή 30 προβολές που θα πρέπει επίσης να δημοσιεύσετε διότι διαφορετικά ο κώδικας θα είναι χωρίς νόημα.


Δεν θέλω να ακούγεται σαν να είμαι προσφέροντας εδώ, αλλά το πρόβλημα δεν είναι τα ερωτήματα. Τα ερωτήματα είναι βέλτιστες (ή τουλάχιστον σχεδόν βέλτιστη). Έχω περάσει αμέτρητες ώρες βελτιστοποίηση τους, ψάχνουν για κάθε στήλη και κάθε τραπέζι που μπορεί να αφαιρεθεί. Φανταστείτε μια έκθεση που έχει 200 ​​ή 300 στήλες που πρέπει να συμπληρωθεί με ένα μόνο εντολή SELECT (γιατί αυτό είναι το πώς σχεδιάστηκε πριν από λίγα χρόνια, όταν ακόμα ήταν ένα μικρό έκθεση).

 
Έχετε αντιμετωπίσει ποτέ ένα ερώτημα που του SQL Server δεν θα μπορούσε να εκτελέσει επειδή αναφέρονται πάρα πολλά τραπέζια;
============================================================================================================================



Για τον SQL Server 2005, θα ήθελα να συστήσει τη χρήση μεταβλητών τραπέζι και εν μέρει την οικοδόμηση των δεδομένων καθώς πηγαίνετε. 


Για να το κάνετε αυτό, δημιουργήστε μια μεταβλητή πίνακα που αντιπροσωπεύει τελικό σύνολο αποτελεσμάτων σας που θέλετε να στείλετε στο χρήστη.


Στη συνέχεια, βρείτε πρωτοβάθμια τραπέζι σας (για παράδειγμα ο πίνακας παραγγελιών στο παράδειγμά σας πάνω) και τραβήξτε αυτά τα δεδομένα, καθώς και ένα κομμάτι των συμπληρωματικών στοιχείων που μόνο να πω ένα ενταχθεί μακριά (το όνομα του πελάτη, το όνομα του προϊόντος). Μπορείτε να κάνετε ένα SELECT INTO να θέσει αυτό το κατ 'ευθείαν στην μεταβλητή τραπέζι σας.


Από εκεί, μετακινηθείτε μέσα από το πίνακα και για κάθε σειρά, κάνει ένα σωρό μικρά SELECT ερωτήματα που ανακτά όλα τα συμπληρωματικά στοιχεία που χρειάζεστε για το σύνολο των αποτελεσμάτων σας. Τοποθετήστε τα σε κάθε στήλη as you go.


Μόλις ολοκληρωθεί, μπορείτε να κάνετε ένα απλό SELECT * από μεταβλητές τραπέζι σας και να επιστρέψετε αυτό το αποτέλεσμα που στο χρήστη.


Δεν έχω κανένα σκληρό αριθμούς για αυτό, αλλά έχουν υπάρξει τρεις διαφορετικές περιπτώσεις που έχω εργαστεί για σήμερα, όπου κάνει αυτά τα μικρότερα ερωτήματα έχει πραγματικά δουλέψει πιο γρήγορα από ό, τι κάνει ένα τεράστιο ερώτημα επιλογής με μια δέσμη των ενώνει.

 

Ποτέ δεν έχω έρθει σε αυτό το είδος της κατάστασης, και για να είμαι ειλικρινής, η ιδέα της αναφοράς> 256 πίνακες σε ένα ερώτημα μου Fils με ένα θανάσιμο φόβο. 


Το πρώτο σας ερώτημα θα πρέπει πιθανότατα από «Γιατί τόσα πολλά;», ακολουθούμενο από το «τι κομμάτια των πληροφοριών μπορώ *ΔΕΝ* χρειάζεται;» Θα ήθελα να ανησυχούν ότι η ποσότητα των δεδομένων που επιστρέφονται από ένα τέτοιο ερώτημα θα αρχίσουν να επηρεάσει την απόδοση της εφαρμογής είναι αρκετά σοβαρά, πάρα πολύ.

 

Θα ήθελα να δω αυτό το ερώτημα, αλλά φαντάζομαι ότι είναι κάποιο πρόβλημα με κάποιο iterator, και ενώ δεν μπορώ να σκεφτώ οποιεσδήποτε καταστάσεις όπου είναι δυνατόν του, Σίγουρα είναι από μια κακή, ενώ / υπόθεση / δρομέα ή έναν τόνο των εφαρμόζονται ελλιπώς θέα.

 

@chopeen Θα μπορούσατε να αλλάξετε τον τρόπο που εσείς τον υπολογισμό αυτών των στατιστικών, και αντ 'αυτού να κρατήσει ένα ξεχωριστό πίνακα όλων των στατιστικών στοιχείων ανά προϊόν .. όταν μια παραγγελία, βρόχο μέσα από τα προϊόντα και να ενημερώσετε τις κατάλληλες εγγραφές στον πίνακα στατιστικών στοιχείων. Αυτό θα αλλάξει πολλά από το φορτίο υπολογισμού στο ταμείο αντί να τρέχει πάντα σε ένα τεράστιο ερώτημα κατά την εκτέλεση μιας έκθεσης. Φυσικά υπάρχουν κάποια στατιστικά που δεν πρόκειται να λειτουργήσει, καθώς με αυτόν τον τρόπο, π.χ. παρακολούθηση επόμενες αγορές των πελατών μετά την αγορά ενός συγκεκριμένου προϊόντος.

 

Αξιολογήστε το ερώτημα: D


Επίσης, νιώθω σαν ένα από τα πιθανά προβλήματα που θα μπορούσαν να έχουν έναν τόνο (διαβάστε 200+) των πινάκων όνομα / τιμή, η οποία θα μπορούσε να συμπυκνωθεί σε ένα ενιαίο πίνακα αναζήτησης.

 

Αυτό θα μπορούσε να συμβεί όλη την ώρα κατά τη σύνταξη αναφοράς Υπηρεσίες Αναφορές για τις εγκαταστάσεις Dynamics CRM που λειτουργούν με SQL Server 2000. CRM έχει μια ωραία κανονικοποιημένο σχήμα δεδομένων η οποία οδηγεί σε πολλά ενώνει. Υπάρχει πραγματικά μια επείγουσα επιδιόρθωση γύρω από αυτό το θέλημα πάνω από το όριο από 256 σε ένα επιβλητικό 260: <http://support.microsoft.com/kb/818406> (πάντα πίστευα αυτό ένα μεγάλο αστείο από την πλευρά της ομάδας του SQL Server).


Η λύση, όπως aludes Dillie-O με, είναι να προσδιοριστούν τα κατάλληλα «υπο-ενώνει» (κατά προτίμηση αυτά που έχουν χρησιμοποιηθεί πολλές φορές) και παράγοντας τα έξω σε θερμοκρασία τραπέζι μεταβλητές που μπορείτε στη συνέχεια να χρησιμοποιήσετε το κύριο σας ενώνει. Είναι ένα σημαντικό PIA και συχνά σκοτώνει απόδοση. Λυπάμαι για εσένα.


@Kevin, αγαπούν αυτό το ΤΕΕ - όλα :-) λέει.

 

Είχα το ίδιο πρόβλημα ... αναπτυξιακού πακέτου μου τρέχει SQL Server 2008 (η θέα δούλεψε μια χαρά), αλλά επί της παραγωγής (με SQL Server 2005) η άποψη δεν το έκανε. Κατέληξα να δημιουργεί τις απόψεις για να αποφύγετε αυτόν τον περιορισμό, χρησιμοποιώντας τις νέες απόψεις στο πλαίσιο του ερωτήματος στην προβολή που έριξε το σφάλμα.


Είδος ανόητο λαμβάνοντας υπόψη τη λογική εκτέλεσης είναι το ίδιο ...

 

Είχε το ίδιο θέμα στον SQL Server 2005 (εργάστηκαν το 2008), όταν θέλησα να δημιουργήσετε μια προβολή. Θα λυθεί το πρόβλημα με τη δημιουργία ενός αποθηκευμένη διαδικασία αντί για προβολή.

 