Ich verwende Sql Server 2008. My Stored Procedure akzeptiert fast 150 Parameter. Ist da was mit der Performance falsch?Gespeicherte Sql-Prozedur mit einer Menge von Parametern
Antwort
Nichts falsch Leistung, aber es riecht als etwas, das besser mit dynamischem SQL getan werden könnte. Schwer zu sagen, ohne den Code zu sehen.
der max 1.024, aber ich denke, 150 wenig ist über
, wenn Sie SQL Server 2008 verwenden Sie den neuen Tabellenparameter verwenden können. Wenn die Parameter identisch sind, können Sie den Tabellenparameter einfach verwenden.
Hier ist der Link zur MSDN. Hier ist another link, ein bisschen mehr erklärt
Genießen Sie.
Vielleicht ist es aus Leistungsperspektive kein Problem. Aber aus Sicht der Wartung.
Sie könnten in Erwägung ziehen, die Daten als einzelnen XML-Parameter zu senden. Details siehe:
Sie auf jeden Fall die Gründe für alle Parameter identifizieren sollte.
- Sind diese Werte in eine Tabelle einzufügen oder zu aktualisieren? Dann können Sie besser einen tabellarischen Parameter für diese Werte verwenden.
- Sind sie komplexe Auswahlkriterien? Dann vermute ich, dass Sie einen XML-Parameter verwenden sollten, um die Auswahlkriterien zu erfüllen. Andernfalls könnten Sie die Häufigkeit neu berechnen, mit der die verschiedenen Kriterien tatsächlich verwendet werden. Sie werden feststellen, dass ein einfacherer SP in 80% der Fälle Ihren Anforderungen entspricht.
Regulars in den SQL Server-Newsgroups werden mit den vielen Streitigkeiten zwischen Joe Celko und Tony Rogerson und einer von ihnen vertraut ist auf den sehr Gegenstand davon, ob es eine gute Idee, um eine gespeicherte Prozedur mit einer großen Anzahl zu verwenden, von Parametern.
Weil die Frage speziell über die Leistung ist, hier ist Tony Seite des Arguments:
Don't use CSV/XML - use 1,000 Parameters instead!
Tony Rogerson ist ein Landsmann (US = limey) und der Titel ist ironisch (US = NULL).
- 1. Gespeicherte Prozedur mit optionalen "WHERE" -Parametern
- 2. Gespeicherte SQL-Prozedur mit unendlichen optionalen Parametern
- 3. clr gespeicherte Prozeduren mit zwei in Parametern
- 4. Übergeben von mehreren Parametern an gespeicherte Prozedur
- 5. Anruf gespeicherte Prozedur mit Parametern Web API
- 6. Gespeicherte Prozedur mit Parametern im Bericht verwenden
- 7. Gespeicherte Prozedur von Crystal Reports XI und MySQL mit Parametern
- 8. Rufen Sie DocumentDb gespeicherte Prozedur von .Net mit Parametern auf.
- 9. Clustering einer Menge von Punkten mit Kreisen
- 10. Übergeben eines Arrays von Parametern an eine gespeicherte Prozedur
- 11. Gespeicherte Prozedur mit Parametern über Web Api Odata aufrufen
- 12. MySQL gespeicherte Prozedur, die Zeichenfolge mit mehreren Parametern akzeptiert
- 13. Erstellen einer Ecto-Abfrage mit einer dynamischen Menge von wo
- 14. Durchsuchen einer verschachtelten Menge
- 15. Verwendung von Tabellenadapter Füllen Sie mit SQL Server gespeicherte Prozedur mit zwei Parametern
- 16. Entity Framework mit optionalen Parametern?
- 17. Größte Dreieck aus einer Menge von Punkten
- 18. Teilen einer Menge (C++)
- 19. Passing unbekannte Menge von Parametern in Asp.Net von Web-Formular Klasse
- 20. Programm zum Analysieren einer Menge von XML
- 21. Gespeicherte Prozedur mit Standardparametern
- 22. Wordpress API json nicht mit einer großen Menge von Beiträgen
- 23. Erstellen einer zu bestimmenden Menge von Objekten mit Loops
- 24. Warum funktioniert add_vertices() nicht mit einer Menge von Strings?
- 25. SQL Server: Übergabe von Nullable-Parametern an eine gespeicherte Prozedur mit dynamischer Abfrage
- 26. Pop einen Wert aus einer Menge mit einer Bedingung
- 27. Loop in einer .bat-Datei mit verschiedenen Parametern
- 28. XMLHttpRequest zum Hochladen einer Datei mit Parametern
- 29. Verarbeitung von FOP mit Parametern
- 30. Auswählen von @ Parametern mit SQL
Nachdem ich mit klassischem ASP-Code gearbeitet habe, erzeugt das dynamische SQL, ich persönlich denke, dass Prozeduren der richtige Weg sind. Es ist keine schnelle und schmutzige Lösung, aber ich denke, der Aufwand hat viele Vorteile, wenn Sie die Dinge zum Laufen bringen. Dynamische Abfragen müssen auch gegen sql injection geschützt werden. – ICodeForCoffee
Dynamische Abfragen sind leicht gegen SQL-Injektion geschützt, indem die Verwendung von Parametern anstelle von String-Verkettung vorgeschrieben wird. Im klassischen ASP nicht so einfach zu machen, aber nichts, was mit vb6 nicht möglich wäre und als COM-Komponente integriert wäre. –