2009-01-19 4 views
12

Ist Code Wiederverwendung und Modulatiy eine gute Idee für die Programmierung von SQL Stored Procedures?Code Wiederverwendung und Modularität in SQL

Und wenn ja, was ist der beste Weg, diese Funktionen zu einer SQL-Code-Basis für gespeicherte Prozeduren hinzuzufügen?

Ich erstelle normalerweise skalare Funktionen für häufige und wiederholte Aufgaben. Ich finde, dass es sowohl die Entwicklung neuer Prozeduren erleichtert, die den bestehenden ähnlich sind, als auch eine Menge bei Bugtracking und Troubleshooting hilft.

Ich versuche, aufgrund von Leistungsproblemen von Tabellenfunktionen fern zu bleiben.

Meine Faustregel ist, dass, wenn es eine Berechnung ist, und es an mehreren Stellen verwendet wird, ich eine Skalarwertfunktion erstellt.

Antwort

2

Sql gibt Ihnen nicht viel Flexibilität, wenn es um die Wiederverwendung von Code geht. Ich erstelle normalerweise Funktionen, wenn es um Berechnungen oder andere Aufgaben geht, bei denen Tabellen nicht verändert werden. Aber bei allen Aufgaben, bei denen in Tabellen geschrieben wird, verwende ich normalerweise eine gespeicherte Prozedur, um die Transaktionen besser steuern zu können.

0

Eine andere Möglichkeit, es von der Anwendungsseite aus zu betrachten, ist das Binden, um Ihre SQL-Abfragen wiederzuverwenden. Aber das ist wahrscheinlich nicht das, was Sie suchen

1

Sie können Code in separate gespeicherte Prozeduren brechen, um zu helfen, komplex gespeicherte Prozeduren in handlichere Brocken zu zerlegen. Sie können auch dasselbe tun, um eine allgemeine Logik zu umgehen, die in einer Funktion nicht funktioniert. Stellen Sie es sich ähnlich wie beim Refactoring einer Extraktmethode vor.

+0

Das Problem mit der Aufteilung einer großen sp in mehrere kleinere ist, dass sie nur auf einer Ebene geschachtelt werden können. – jandersson

+0

Ich bin mir nicht sicher, ob ich das verstehe. Warum nur eine Ebene? – Ian1971

+0

Ich weiß nicht warum, es ist ein Limit von SQL Server. Sie können eine temporäre Tabelle nicht ausführen, wenn die von Ihnen aufgerufene Prozedur eine andere Prozedur für Daten aufruft. – jandersson

5

Sie werden feststellen, dass die Verwendung von Funktionen in Ihren Abfragen eine Katastrophe für die Leistung ist. Die Funktionen werden zu einer schwarzen Box für den Optimierer, sodass Sie den Funktionsaufruf in die Abfrage umkodieren, damit er schnell ausgeführt wird, sobald Sie eine große Anzahl von Zeilen in Ihren Tabellen erreicht haben.

Eine bessere Möglichkeit, mit allgemeinen Berechnungen umzugehen, besteht darin, sie in eine neue Spalte mit einem Trigger oder in Ihre Einfüge-/Aktualisierungsabfragen einzufügen. Auf diese Weise können Sie den berechneten Wert indizieren und ihn direkt verwenden, anstatt ihn jedes Mal neu zu berechnen, wenn Sie ihn benötigen.

0

Um dies zu verfolgen, stieß ich auf einige Leistungsprobleme, und es scheint, dass der Optimierer nicht in der Lage ist, den richtigen Index für Code innerhalb der Funktionen auszuwählen.

Also musste ich den richtigen Index mit Index Tipps (mit Schlüsselwort) angeben, um das Leistungsproblem zu lösen.

Verwandte Themen