Ich bin auf der Suche nach einer Art "Best Practice" -Methode, um dieses häufige Szenario anzugehen. Ich denke, die Frage wird am besten mit einem Beispiel gestellt. Nehmen wir folgendes an:Reporting Services/Unterstützung von robusten Filtern
- Das Ziel ist es, einen Bericht 'Auftragszusammenfassung' zu schreiben, der eine Liste von Aufträgen auf der Grundlage verschiedener Filterkriterien anzeigt.
- Beispiel: Der Benutzer möchte auf alle Bestellungen zwischen X und Y Daten
- Beispiel erstellt berichten: Der Benutzer auf alle Bestellungen mit dem Status ‚offen‘
- Beispiel berichten will: Der Benutzer möchte Bericht über alle von einem anderen Benutzer erzeugt Aufträge XYZ
- Beispiel: Der Benutzer möchte auf alle Bestellungen zwischen $ 1000 und $ 10000
Diese Berichte wahrscheinlich von verschiedenen Seiten gestartet werden berichten, aber vielleicht könnte es eine ' weiter ced suchen‘Seite, die sie aktivieren/deaktivieren Filter und definieren Parameter
ich über Berichtsparameter implementiert, um den Bericht
Erstellen eines einzigen Bericht mit all diesen Filter erzeugen möchten verwenden Remote-Bearbeitung erlaubt und Bericht-Filter wird sehr schnell und unzugänglich sehr schnell. Dies führt mich zu der Annahme, dass ich eine einzige gespeicherte Prozedur erstellen sollte, die alle möglichen Filterwerte akzeptiert (und einen NULL, wenn die Ergebnismenge nicht durch den Parameter gefiltert werden sollte).
Stimmen Sie dieser Einschätzung zu?
Wenn ja, bin ich kein TSQL-Experte und hätte gerne allgemeine Hinweise zur Implementierung dieser gespeicherten Prozedur. Bisher habe ich es so mache:
- Erstellen Sie eine Tabelle Variable orderID @resultset
- Populate zunächst über den ersten Filter @resultset (wählte i starten und stoppen Datum)
- Für jeden Filter:
- Wenn der Filter definiert ist, eine Tabelle mit variabler @tempresultset erstellen und alle Datensätze aus @resultset einzufügen WHERE (Filter anwendbar ist)
- aus @resultset löschen, einfügen in @resultset wählen orderid aus @tempresultset
- Rückkehr der @resultset nachdem alle Filter wurden
angewendet dieses nicht nur das Gefühl, Recht/effizient ... Gibt es einen besseren Weg, dies zu nähern?
Alle anderen Vorschläge oder Ratschläge, wie man dieses allgemeine Problem angehen könnte, würden sehr geschätzt werden. Ich fühle mich etwas verloren auf dem richtigen Weg, um diese Lösung zu implementieren, was wie ein sehr häufiges Problem aussehen sollte.