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

59voto

Alex Martelli Punkte 805329

Schreiben Sie eine benutzerdefinierte Funktion, wenn Sie einen Wert zur Verwendung in anderen SQL-Anweisungen berechnen und zurückgeben möchten; schreiben Sie eine gespeicherte Prozedur, wenn Sie stattdessen einen möglicherweise komplexen Satz von SQL-Anweisungen gruppieren möchten. Das sind schließlich zwei ganz unterschiedliche Anwendungsfälle!

28voto

Ankit Punkte 4529

Grundlegender Unterschied

Eine Funktion muss einen Wert zurückgeben, aber in einer gespeicherten Prozedur ist dies optional (eine Prozedur kann null oder n Werte zurückgeben).

Funktionen können nur Eingabeparameter haben, während Prozeduren Eingabe-/Ausgabeparameter haben können.

Funktion nimmt einen Eingabeparameter ist es obligatorisch, aber Stored Procedure kann o bis n Eingabeparameter nehmen.

Funktionen können von Prozeduren aufgerufen werden, während Prozeduren nicht von Funktionen aufgerufen werden können.

Vorlaufdifferenz

Prozeduren erlauben sowohl SELECT- als auch DML-Anweisungen (INSERT/UPDATE/DELETE), während Funktionen nur SELECT-Anweisungen erlauben.

Prozeduren können nicht in einer SELECT-Anweisung verwendet werden, während eine Funktion in eine SELECT-Anweisung eingebettet werden kann.

Stored Procedures können nicht in den SQL-Anweisungen irgendwo im WHERE/HAVING/SELECT-Abschnitt verwendet werden, während Function dies kann.

Funktionen, die Tabellen zurückgeben, können als weiteres Rowset behandelt werden. Dies kann in JOINs mit anderen Tabellen verwendet werden.

Inline-Funktionen können als Ansichten betrachtet werden, die Parameter annehmen und in JOINs und anderen Rowset-Operationen verwendet werden können.

Ausnahmen können in einer Prozedur durch einen try-catch-Block behandelt werden, während ein try-catch-Block in einer Funktion nicht verwendet werden kann.

Wir können für die Transaktionsverwaltung in Verfahren gehen, während wir nicht in Funktion gehen können.

Quelle

22voto

OpenSource Punkte 2147

Eine benutzerdefinierte Funktion ist ein wichtiges Werkzeug für einen SQL-Server-Programmierer. Sie können sie inline in einer SQL-Anweisung wie folgt verwenden

SELECT a, lookupValue(b), c FROM customers 

wobei lookupValue wird eine UDF sein. Diese Art von Funktionalität ist bei Verwendung einer gespeicherten Prozedur nicht möglich. Gleichzeitig können Sie bestimmte Dinge innerhalb einer UDF nicht tun. Das Wichtigste ist, dass UDF's:

  • keine dauerhaften Veränderungen bewirken kann
  • kann Daten nicht ändern

eine gespeicherte Prozedur kann diese Dinge tun.

Für mich ist die Inline-Verwendung einer UDF die wichtigste Verwendung einer UDF.

18voto

Tigerjz32 Punkte 3918

Gespeicherte Prozeduren als Skripte verwendet werden . Sie führen eine Reihe von Befehlen für Sie aus und Sie können sie zu bestimmten Zeiten ausführen lassen. Normalerweise werden mehrere DML-Anweisungen wie INSERT, UPDATE, DELETE usw. oder sogar SELECT ausgeführt.

Funktionen werden als Methoden verwendet. Man übergibt etwas und erhält ein Ergebnis. Sollte klein und schnell sein - macht es on the fly. Wird normalerweise in einer SELECT-Anweisung verwendet.

8voto

Achilles Punkte 1462

SQL Server-Funktionen sind wie Cursors als letzte Waffe gedacht! Sie haben Leistungsprobleme und daher sollte die Verwendung einer tabellenwertigen Funktion so weit wie möglich vermieden werden. Wenn man von Leistung spricht, geht es um eine Tabelle mit mehr als 1.000.000 Datensätzen, die auf einem Server mit Mittelklasse-Hardware gehostet wird; andernfalls braucht man sich keine Gedanken über die von den Funktionen verursachten Leistungseinbußen zu machen.

  1. Verwenden Sie niemals eine Funktion, um eine Ergebnismenge an einen externen Code (wie ADO.Net) zurückzugeben.
  2. Verwenden Sie die Kombination aus Ansichten und gespeicherten Prozessen so oft wie möglich. Sie können künftige Probleme mit der Wachstumsleistung mit den Vorschlägen von DTA (Database Tuning Adviser) beheben (wie indizierte Ansichten und Statistiken) - manchmal!

für weitere Informationen siehe: http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html

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