it-swarm.com.de

Was ist der Unterschied zwischen einer gespeicherten Prozedur und einer Ansicht?

Ich bin verwirrt über ein paar Punkte:

  1. Was ist der Unterschied zwischen einer gespeicherten Prozedur und einer Ansicht?

  2. Wann sollte ich gespeicherte Prozeduren und wann Ansichten in SQL Server verwenden?

  3. Können in Ansichten dynamische Abfragen erstellt werden, in denen Parameter übergeben werden können?

  4. Welches ist das schnellste und auf welcher Basis ist eines schneller als das andere?

  5. Ordnen Ansichten oder gespeicherte Prozeduren permanent Speicher zu?

  6. Was bedeutet es, wenn jemand sagt, dass Ansichten eine virtuelle Tabelle erstellen, während Prozeduren eine Materialtabelle erstellen?

Bitte lassen Sie mich weitere Punkte wissen, falls es welche gibt.

111
NoviceToDotNet

Eine Ansicht repräsentiert eine virtuelle Tabelle. Sie können mehrere Tabellen in einer Ansicht verknüpfen und die Ansicht verwenden, um die Daten so darzustellen, als stammten sie aus einer einzelnen Tabelle.

Eine gespeicherte Prozedur verwendet Parameter, um eine Funktion auszuführen ... unabhängig davon, ob sie Daten aktualisiert und einfügt oder einzelne Werte oder Datensätze zurückgibt.

Erstellen von Ansichten und gespeicherten Prozeduren - enthält einige Informationen von Microsoft, wann und warum diese verwendet werden sollen.

Angenommen, ich habe zwei Tische:

tbl_user Spalten: .user_id, .user_name, .user_pw

tbl_profile Spalten: .profile_id, .user_id .profile_description

Also, wenn ich mich dabei befinde, ALOT von diesen Tabellen aus abzufragen ... anstatt den Join in JEDEM SQL-Peice auszuführen, würde ich eine Ansicht wie die folgende definieren:

CREATE View vw_user_profile
AS
  Select A.user_id, B.profile_description
  FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id
GO

Also in Zukunft, wenn ich profile_description nach Benutzer-ID abfragen möchte ... alles, was ich tun muss, ist

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

DIESER Code könnte in einer gespeicherten Prozedur wie folgt verwendet werden:

create procedure dbo.getDesc
 @ID int
AS
begin
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

Also kann ich später anrufen

dbo.getDesc 25

und ich werde die Beschreibung für Benutzer-ID 25 erhalten, wobei die 25 Ihr Parameter ist.

Es gibt natürlich VIEL mehr Details, aber das ist nur die Grundidee.

114
Patrick

Viele Informationen im Web wie this

Hier ist eine gute Zusammenfassung:

Eine gespeicherte Prozedur:

  • akzeptiert Parameter
  • kann [~ # ~] nicht [~ # ~] als Baustein in einer größeren Abfrage verwendet werden
  • kann mehrere Anweisungen, Schleifen, IF ELSE usw. enthalten.
  • kann Änderungen an einer oder mehreren Tabellen vornehmen
  • kann NICHT als Ziel einer INSERT-, UPDATE- oder DELETE-Anweisung verwendet werden.

Eine Ansicht:

  • akzeptiert keine Parameter
  • kann als Baustein in einer größeren Abfrage verwendet werden
  • kann nur eine einzige SELECT-Abfrage enthalten
  • kann KEINE Änderungen an einer Tabelle vornehmen
  • kann aber (manchmal) als Ziel einer INSERT-, UPDATE- oder DELETE-Anweisung verwendet werden.
78
cusimar9

Zuerst musst du verstehen, dass beides verschiedene Dinge sind. Gespeicherte Prozeduren werden am besten für INSERT-UPDATE-DELETE-Anweisungen verwendet. und Views werden für SELECT-Anweisungen verwendet. und Sie sollten beide verwenden.

In Ansichten können Sie die Daten nicht ändern. Einige Datenbanken verfügen über aktualisierbare Ansichten, in denen Sie INSERT-UPDATE-DELETE für Ansichten verwenden können.

9
Mahesh

Eine SQL-Ansicht ist eine virtuelle Tabelle, die auf einer SQL SELECT-Abfrage basiert. Eine Ansicht verweist auf eine oder mehrere vorhandene Datenbanktabellen oder andere Ansichten. Dies ist die Momentaufnahme der Datenbank, während eine gespeicherte Prozedur eine Gruppe von Transact-SQL-Anweisungen ist, die in einem einzigen Ausführungsplan kompiliert wurden.

View ist eine einfache Darstellung von Daten, die in den Datenbanktabellen gespeichert sind, wohingegen eine gespeicherte Prozedur eine Gruppe von Anweisungen ist, die ausgeführt werden können.

Eine Ansicht ist schneller, da sie Daten aus den Tabellen anzeigt, auf die verwiesen wird, während eine Speicherprozedur SQL-Anweisungen ausführt.

Überprüfen Sie diesen Artikel: View vs Stored Procedures . Genau das, wonach Sie suchen

5
reggie

Eine Ansicht ist eine einfache Methode zum Speichern eines komplexen SELECT in der Datenbank.

Eine Speicherprozedur wird verwendet, wenn einfaches SQL nicht ausreicht. Speicherprozeduren enthalten Variablen, Schleifen und Aufrufe anderer gespeicherter Prozeduren. Es ist eine Programmiersprache, keine Abfragesprache.

  1. Ansichten sind statisch. Stellen Sie sich diese Tabellen als neue Tabellen mit einem bestimmten Layout vor, und die darin enthaltenen Daten werden mithilfe der Abfrage, mit der Sie sie erstellt haben, im Handumdrehen erstellt. Wie bei jeder SQL-Tabelle können Sie sie mit WHERE, GROUP BY Und ORDER BY Sortieren und filtern.

  2. Das hängt davon ab, was Sie tun.

  3. Das hängt von der Datenbank ab. In einfachen Ansichten wird nur die Abfrage ausgeführt und das Ergebnis gefiltert. Datenbanken wie Oracle ermöglichen es jedoch, eine "materialisierte" Ansicht zu erstellen, bei der es sich im Grunde um eine Tabelle handelt, die automatisch aktualisiert wird, wenn sich die zugrunde liegenden Daten der Ansicht ändern.

    In einer materialisierten Ansicht können Sie Indizes für die Spalten der Ansicht erstellen (insbesondere für die berechneten Spalten, die nirgendwo in der Datenbank vorhanden sind).

  4. Ich verstehe nicht, wovon du redest.

5
Aaron Digulla
  1. Eine VIEW ist eine dynamische Abfrage, bei der Sie eine "WHERE" -Klausel verwenden können
  2. Eine gespeicherte Prozedur ist eine feste Datenauswahl, die ein vordefiniertes Ergebnis zurückgibt
  3. Weder eine Ansicht noch eine gespeicherte Prozedur weisen Speicher zu. Nur eine materialisierte Ansicht
  4. Eine TABELLE ist nur eine ENTITÄT. In einer Ansicht können Daten aus verschiedenen ENTITÄTEN oder TABELLEN erfasst werden
3
swissben

Der Hauptunterschied besteht darin, dass beim Abfragen einer Ansicht deren Definition in Ihre Abfrage eingefügt wird. Prozedur könnte auch Abfrageergebnisse liefern, ist aber kompiliert und dafür so schneller. Eine weitere Option sind indizierte Ansichten.

3
rsc

Mahesh ist nicht ganz richtig, wenn er vorschlägt, dass Sie die Daten in einer Ansicht nicht ändern können. Also mit Patrick's Sicht

CREATE View vw_user_profile AS 
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id

Ich KANN die Daten aktualisieren ... als Beispiel kann ich beides tun ...

Update vw_user_profile Set profile_description='Manager' where user_id=4

oder

Update tbl_profile Set profile_description='Manager' where user_id=4

Sie können diese Ansicht nicht EINFÜGEN, da nicht alle Felder in der gesamten Tabelle vorhanden sind und ich davon ausgehe, dass PROFILE_ID der Primärschlüssel ist und nicht NULL sein kann. Allerdings kann man manchmal in eine Ansicht EINFÜGEN ...

Ich habe eine Ansicht auf eine vorhandene Tabelle mit ... erstellt.

Create View Junk as SELECT * from [TableName]

DANN

Insert into junk (Code,name) values 
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')

und

DELETE from Junk Where ID>4

Sowohl das INSERT als auch das DELETE funktionierten in diesem Fall

Natürlich können Sie keine Felder aktualisieren, die aggregiert oder berechnet wurden, aber jede Ansicht, die nur eine gerade Ansicht ist, sollte aktualisierbar sein.

Wenn die Ansicht mehr als eine Tabelle enthält, können Sie diese nicht einfügen oder löschen. Wenn die Ansicht jedoch nur eine Teilmenge einer Tabelle ist, können Sie dies normalerweise tun.

2
Glyn Roberts

Zusätzlich zu den obigen Kommentaren möchte ich einige Punkte zu Views hinzufügen.

  1. Ansichten können verwendet werden, um die Komplexität zu verbergen. Stellen Sie sich ein Szenario vor, in dem 5 Personen an einem Projekt arbeiten, aber nur einer von ihnen mit Datenbank-Dingen wie komplexen Verknüpfungen zu gut zurechtkommt. In einem solchen Szenario kann er Ansichten erstellen, die von anderen Teammitgliedern einfach abgefragt werden können, wenn sie eine einzelne Tabelle abfragen.
  2. Sicherheit kann einfach von Views implementiert werden. Angenommen, wir haben eine Tabelle Mitarbeiter, die vertrauliche Spalten wie Gehalt, SSN-Nummer enthält. Diese Spalten dürfen nicht für Benutzer sichtbar sein, die nicht berechtigt sind, sie anzuzeigen. In diesem Fall können wir eine Ansicht erstellen, in der die Spalten in einer Tabelle ausgewählt werden, für die keine Berechtigung erforderlich ist, z. B. Name , Alter usw., ohne sensible Spalten (wie das zuvor erwähnte Gehalt usw.) preiszugeben. Jetzt können wir die Berechtigung zum direkten Abfragen der Tabelle entfernen Mitarbeiter und einfach die Leseberechtigung für die Ansicht beibehalten. Auf diese Weise können wir die Sicherheit mithilfe von Ansichten implementieren.
1
Ajendra Prasad

@Patrick stimmt mit dem, was er gesagt hat, aber um Ihre anderen Fragen zu beantworten, erstellt sich eine Ansicht im Speicher. Abhängig von der Art der Verknüpfungen, Daten und der Aggregation kann es zu einer sehr speicherhungrigen Ansicht kommen.

Gespeicherte Prozeduren führen ihre gesamte Verarbeitung entweder mithilfe der Temp-Hash-Tabelle, z. B. # tmpTable1, oder mithilfe von @ tmpTable1 im Speicher durch. Je nachdem, was Sie ihm sagen möchten.

Eine gespeicherte Prozedur ist wie eine Funktion, wird jedoch direkt nach ihrem Namen aufgerufen. anstelle von Funktionen, die tatsächlich in einer Abfrage selbst verwendet werden.

Offensichtlich sind Speichertabellen die meiste Zeit schneller, wenn Sie nicht viele Daten abrufen.

1
Robbie Tapping