998 Stimmen

Funktion vs. Gespeicherte Prozedur in SQL Server

Ich lerne schon seit einiger Zeit Funktionen und Stored Procedure, aber ich weiß nicht, warum und wann ich eine Funktion oder eine Stored Procedure verwenden sollte. Für mich sehen sie gleich aus, vielleicht weil ich in diesem Bereich ein Neuling bin.

Kann mir jemand sagen, warum?

6 Stimmen

1 Stimmen

1 Stimmen

8voto

JaiSankarN Punkte 453

Gespeicherte Prozedur:

  • Ist wie ein Miniaturprogramm in SQL Server.
  • Kann so einfach sein wie eine select-Anweisung oder so komplex wie eine lange Skript, das Daten hinzufügt, löscht, aktualisiert und/oder aus mehreren Tabellen in einer Datenbank liest.
  • (Kann Schleifen und Cursor implementieren, die beide die Arbeit mit kleineren Ergebnissen oder zeilenweisen Operationen auf Daten.)
  • Sollte aufgerufen werden mit EXEC o EXECUTE Erklärung.
  • Gibt Tabellenvariablen zurück, aber wir können nicht verwenden OUT Parameter.
  • Unterstützt Transaktionen.

Funktion:

  • Kann nicht zum Aktualisieren, Löschen oder Hinzufügen von Datensätzen in der Datenbank verwendet werden.

  • Gibt einfach einen einzelnen Wert oder einen Tabellenwert zurück.

  • Kann nur zur Auswahl von Datensätzen verwendet werden. Es kann jedoch aufgerufen werden sehr einfach von Standard-SQL aus aufgerufen werden, wie z.B.:

    SELECT dbo.functionname('Parameter1')

    oder

    SELECT Name, dbo.Functionname('Parameter1') FROM sysObjects
  • Für einfache, wiederverwendbare Auswahloperationen können Funktionen den Code vereinfachen. Seien Sie nur vorsichtig bei der Verwendung von JOIN Klauseln in Ihren Funktionen. Wenn Ihre Funktion eine JOIN Klausel und Sie rufen sie von einer anderen select Anweisung aufrufen, die mehrere Ergebnisse liefert, wird dieser Funktionsaufruf JOIN diese Tabellen zusammen für jede Zeile in der Ergebnismenge zurückgegeben. Also können sie zwar bei der Vereinfachung einer bestimmten Logik hilfreich sein, sie können aber auch ein Leistungsengpass sein, wenn sie nicht richtig eingesetzt werden.

  • Gibt die Werte unter Verwendung von OUT Parameter.

  • Es werden keine Transaktionen unterstützt.

8voto

Mahesh Waghmare Punkte 1150

Benutzerdefinierte Funktion.

  1. Die Funktion muss einen Wert zurückgeben.
  2. Erlaubt nur Select-Anweisungen, nicht aber DML-Anweisungen.
  3. Er erlaubt nur Eingabeparameter, unterstützt aber keine Ausgabeparameter.
  4. Die Verwendung von try-catch-Blöcken ist damit nicht möglich.
  5. Transaktionen sind innerhalb von Funktionen nicht erlaubt.
  6. Wir können nur Tabellenvariablen verwenden, die Verwendung temporärer Tabellen ist nicht möglich.
  7. Stored Procedures können nicht von einer Funktion aus aufgerufen werden.
  8. Funktionen können über eine Select-Anweisung aufgerufen werden.
  9. Eine UDF kann in einer Join-Klausel als Ergebnismenge verwendet werden.

Gespeicherte Prozedur

  1. Stored Procedure kann Werte zurückgeben oder nicht.
  2. Kann sowohl Select-Anweisungen als auch DML-Anweisungen wie Insert, Update, Delete usw. enthalten
  3. Er kann sowohl Eingabe- als auch Ausgabeparameter haben.
  4. Für die Behandlung von Ausnahmen können wir try-catch-Blöcke verwenden.
  5. Kann Transaktionen in Stored Procedures verwenden.
  6. Es können sowohl Tabellenvariablen als auch temporäre Tabellen verwendet werden.
  7. Stored Procedures können Funktionen aufrufen.
  8. Prozeduren können nicht von Select/Where/Having-Anweisungen usw. aufgerufen werden. Execute/Exec-Anweisung kann verwendet werden, um Stored Procedure aufzurufen/auszuführen.
  9. Prozeduren können nicht in Join-Klauseln verwendet werden

6voto

Arnkrishn Punkte 28604

Bei der Entscheidung, wann was eingesetzt werden soll, können die folgenden Punkte helfen

  1. Gespeicherte Prozeduren können keine Tabellenvariable zurückgeben, während Funktionen dies tun können.

  2. Sie können gespeicherte Prozeduren verwenden, um die Parameter der Serverumgebung zu ändern, während Sie dies mit Funktionen nicht können.

Prost

4voto

Andrew Punkte 326

Beginnen Sie mit Funktionen, die einen einzigen Wert zurückgeben. Das Schöne daran ist, dass Sie häufig verwendeten Code in eine Funktion einfügen und als Spalte in einer Ergebnismenge zurückgeben können.

Dann könnten Sie eine Funktion für eine parametrisierte Liste von Städten verwenden. dbo.GetCitiesIn("NY") Das gibt eine Tabelle zurück, die als Verknüpfung verwendet werden kann.

Es ist eine Art, den Code zu organisieren. Das Wissen, wann etwas wiederverwendbar ist und wann es Zeitverschwendung ist, kann man nur durch Ausprobieren und Erfahrung gewinnen.

Auch Funktionen sind in SQL Server eine gute Idee. Sie sind schneller und können sehr leistungsfähig sein. Inline- und Direktauswahlen. Achten Sie darauf, sie nicht übermäßig zu verwenden.

4voto

user2023861 Punkte 7454

Hier ist ein praktischer Grund, Funktionen gegenüber gespeicherten Prozeduren zu bevorzugen. Wenn Sie eine gespeicherte Prozedur haben, die die Ergebnisse einer anderen gespeicherten Prozedur benötigt, müssen Sie eine insert-exec-Anweisung verwenden. Das bedeutet, dass Sie eine temporäre Tabelle erstellen müssen und eine exec Anweisung, um die Ergebnisse der gespeicherten Prozedur in die temporäre Tabelle einzufügen. Das ist chaotisch. Ein Problem dabei ist, dass insert-execs können nicht verschachtelt werden .

Wenn Sie mit gespeicherten Prozeduren zu tun haben, die andere gespeicherte Prozeduren aufrufen, können Sie auf dieses Problem stoßen. Wenn die verschachtelte gespeicherte Prozedur einfach einen Datensatz zurückgibt, kann sie durch eine tabellenbewertete Funktion ersetzt werden, und Sie erhalten diesen Fehler nicht mehr.

( dies ist ein weiterer Grund, warum wir die Geschäftslogik aus der Datenbank heraushalten sollten )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X