Eine Ansicht repräsentiert eine virtuelle Tabelle. Sie können mehrere Tabellen in einer Ansicht verbinden und die Ansicht verwenden, um die Daten so darzustellen, als ob die Daten aus einer einzelnen Tabelle stammen würden.
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 sie jeweils verwendet werden sollen.
Angenommen, ich habe zwei Tabellen:
tbl_user
, Mit Säulen: user_id
, user_name
,user_pw
tbl_profile
, Mit Säulen: profile_id
, user_id
,profile_description
Wenn ich also VIEL von diesen Tabellen abfrage ... anstatt den Join in JEDEM SQL-Teil durchzuführen, würde ich eine Ansicht definieren wie:
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, wenn ich abfragen möchte profile_description
, indem user_id
in der Zukunft, alles , was ich zu tun ist :
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
Dieser Code kann in einer gespeicherten Prozedur wie der folgenden 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 bekommen user_id
25 bekommen, wobei das 25
Ihr Parameter ist.
Es gibt offensichtlich viel mehr Details, dies ist nur die Grundidee.
Viele Infos gibt es hier
Hier ist eine gute Zusammenfassung:
Eine gespeicherte Prozedur:
Eine Sicht:
quelle
Zuerst müssen Sie verstehen, dass beide verschiedene Dinge sind.
Stored Procedures
werden am besten fürINSERT-UPDATE-DELETE
Aussagen verwendet. WährendViews
für verwendet werdenSELECT
Aussagen verwendet werden. Sie sollten beide verwenden.In Ansichten können Sie die Daten nicht ändern.Einige Datenbanken haben aktualisierbar Ansichten , wo Sie verwenden können ,INSERT-UPDATE-DELETE
aufViews
.quelle
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 zusammengefasst sind.
View ist eine einfache Darstellung der in den Datenbanktabellen gespeicherten Daten, während 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
quelle
Eine Ansicht ist eine einfache Möglichkeit, einen Komplex zu speichern
SELECT
in der Datenbank zu speichern.Eine Speicherprozedur wird verwendet, wenn einfaches SQL einfach nicht ausreicht. Speicherprozeduren enthalten Variablen, Schleifen und Aufrufe anderer gespeicherter Prozeduren. Es ist eine Programmiersprache, keine Abfragesprache.
Ansichten sind statisch. Stellen Sie sich diese als neue Tabellen mit einem bestimmten Layout vor, und die darin enthaltenen Daten werden im laufenden Betrieb mit der Abfrage erstellt, mit der Sie sie erstellt haben. Wie bei jeder SQL - Tabelle, können Sie es sortieren und filtern mit
WHERE
,GROUP BY
undORDER BY
.Das hängt davon ab, was Sie tun.
Das hängt von der Datenbank ab. Einfache Ansichten führen einfach die Abfrage aus und filtern das Ergebnis. 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 an keiner Stelle in der Datenbank vorhanden sind).
Ich verstehe nicht, wovon du sprichst.
quelle
Zusätzlich zu den obigen Kommentaren möchte ich einige Punkte zu Ansichten hinzufügen.
quelle
quelle
Mahesh ist nicht ganz richtig, wenn er vorschlägt, dass Sie die Daten in einer Ansicht nicht ändern können. Also mit Patricks Sicht
Ich kann die Daten aktualisieren ... als Beispiel kann ich beides tun ...
oder
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. Sie können jedoch manchmal in eine Ansicht EINFÜGEN ...
Ich habe eine Ansicht für eine vorhandene Tabelle mit ...
DANN
und
In diesem Fall funktionierten sowohl INSERT als auch DELETE
Natürlich können Sie keine Felder aktualisieren, die aggregiert oder berechnet sind, aber jede Ansicht, die nur eine gerade Ansicht ist, sollte aktualisierbar sein.
Wenn die Ansicht mehr als eine Tabelle enthält, können Sie sie nicht einfügen oder löschen. Wenn die Ansicht jedoch nur eine Teilmenge einer Tabelle ist, können Sie dies normalerweise tun.
quelle
Der Hauptunterschied besteht darin, dass beim Abfragen einer Ansicht deren Definition in Ihre Abfrage eingefügt wird. Prozedur könnte auch Ergebnisse der Abfrage liefern, aber es wird kompiliert und für so schneller. Eine weitere Option sind indizierte Ansichten.
quelle
Aussicht :
Gespeicherte Prozedur :
quelle
@Patrick stimmt mit dem überein, was er gesagt hat, aber um Ihre anderen Fragen zu beantworten, wird sich eine Ansicht im Speicher erstellen. Abhängig von der Art der Verknüpfungen, Daten und wenn eine Aggregation durchgeführt wird, kann es sich um eine ziemlich speicherhungrige Ansicht handeln.
Gespeicherte Prozeduren führen ihre gesamte Verarbeitung entweder mithilfe der Temp-Hash-Tabelle aus, z. B. # tmpTable1, oder im Speicher mithilfe von @ tmpTable1. Je nachdem, was Sie ihm sagen möchten.
Eine gespeicherte Prozedur ähnelt einer Funktion, wird jedoch direkt mit 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.
quelle