Können wir einen Parameter an eine Ansicht in Microsoft SQL Server übergeben?
Ich habe es auf create view
folgende Weise versucht , aber es funktioniert nicht:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
sql
sql-server
parameters
parameter-passing
views
Arunachalam
quelle
quelle
Parameters are out of the discussion
Zu kühne Aussage. GegenbeispielAntworten:
Wie schon gesagt, kannst du nicht.
Eine mögliche Lösung wäre die Implementierung einer gespeicherten Funktion wie:
Auf diese Weise können Sie es als normale Ansicht verwenden, mit:
quelle
Es gibt zwei Möglichkeiten, um das zu erreichen, was Sie leider wollen, und beide können nicht mit einer Ansicht ausgeführt werden.
Sie können entweder eine benutzerdefinierte Funktion mit Tabellenwert erstellen, die den gewünschten Parameter verwendet und ein Abfrageergebnis zurückgibt
Oder Sie können so ziemlich dasselbe tun, aber anstelle einer benutzerdefinierten Funktion eine gespeicherte Prozedur erstellen.
Beispielsweise
Die gespeicherte Prozedur würde so aussehen
Oder die benutzerdefinierte Funktion würde so aussehen
quelle
SELECT
einfach verwenden können: Lesen Sie mehr .Nein, das kannst du nicht, wie Mladen Prajdic sagte. Stellen Sie sich eine Ansicht als "statischen Filter" für eine Tabelle oder eine Kombination von Tabellen vor. Zum Beispiel: eine Ansicht können Tabellen kombinieren
Order
undCustomer
so eine neue „Tabelle“ Zeilen aus erhaltenOrder
zusammen mit neuen Spalten den Namen des Kunden und die Kundennummer (Kombination von Tabellen) enthält. Oder Sie erstellen eine Ansicht, in der nur unverarbeitete Aufträge aus derOrder
Tabelle ausgewählt werden (statischer Filter).Sie würden dann aus der Ansicht auswählen, wie Sie es aus einer anderen "normalen" Tabelle auswählen würden - alle "nicht statischen" Filter müssen außerhalb der Ansicht durchgeführt werden (z. B. "Alle Bestellungen für Kunden mit dem Namen Miller abrufen" oder "Unverarbeitete Bestellungen abrufen" das kam am 24. Dezember ").
quelle
Normalerweise werden Ansichten nicht parametrisiert. Sie können jedoch immer einige Parameter einfügen. Beispiel: Verwenden des Sitzungskontexts :
Aufruf:
Und ein anderer:
DBFiddle Demo
Gleiches gilt für Oracle (natürlich ist die Syntax für die Kontextfunktion unterschiedlich).
quelle
Warum benötigen Sie einen Parameter in der Ansicht? Sie könnten einfach eine
WHERE
Klausel verwenden.und Ihre Anfrage sollte den Job machen:
quelle
WHERE
Tabelle statt um eineWHERE
Ansicht handelt.Eine hackige Möglichkeit, dies ohne gespeicherte Prozeduren oder Funktionen zu tun, besteht darin, eine Einstellungstabelle in Ihrer Datenbank mit den Spalten Id, Param1, Param2 usw. zu erstellen. Fügen Sie eine Zeile in diese Tabelle ein, die die Werte Id = 1, Param1 = 0, Param2 enthält = 0 usw. Anschließend können Sie dieser Tabelle in Ihrer Ansicht einen Join hinzufügen, um den gewünschten Effekt zu erzielen, und die Einstellungstabelle aktualisieren, bevor Sie die Ansicht ausführen. Wenn mehrere Benutzer die Einstellungstabelle aktualisieren und die Ansicht gleichzeitig ausführen, kann ein Fehler auftreten. Andernfalls sollte dies in Ordnung sein. Etwas wie:
quelle
Nein. Wenn Sie dann eine benutzerdefinierte Funktion verwenden müssen, an die Sie Parameter übergeben können.
quelle
Nein, eine Ansicht wird nicht anders abgefragt als SELECTing aus einer Tabelle.
Verwenden Sie eine benutzerdefinierte Funktion mit Tabellenwert und einem oder mehreren Parametern , um das zu tun, was Sie möchten
quelle
Eine Ansicht ist nichts anderes als eine vordefinierte 'SELECT'-Anweisung. Die einzig wahre Antwort wäre also: Nein, das kannst du nicht.
Ich denke, was Sie wirklich tun möchten, ist eine gespeicherte Prozedur zu erstellen, in der Sie im Prinzip jede gültige SQL verwenden können, um zu tun, was Sie wollen, einschließlich der Annahme von Parametern und der Auswahl von Daten.
Es ist wahrscheinlich, dass Sie wirklich nur eine where-Klausel hinzufügen müssen, wenn Sie aus Ihrer Ansicht auswählen, aber Sie haben nicht wirklich genug Details angegeben, um sicherzugehen.
quelle
Wir können eine gespeicherte Prozedur mit Eingabeparametern schreiben und diese gespeicherte Prozedur dann verwenden, um eine Ergebnismenge aus der Ansicht abzurufen. siehe Beispiel unten.
Die gespeicherte Prozedur ist
und die Ansicht, aus der wir die Ergebnismenge erhalten können, ist
quelle
Wie ich weiß, kann die Ansicht so etwas wie ein Auswahlbefehl sein. Sie können dieser Auswahl auch Parameter hinzufügen, z. B. in folgenden Anweisungen:
quelle
Nein, eine Ansicht ist statisch. Sie können (abhängig von der Version des SQl-Servers) eine Ansicht indizieren.
In Ihrem Beispiel (nur eine Tabelle abfragen) hat eine indizierte Ansicht keinen Vorteil darin, die Tabelle einfach mit einem Index abzufragen. Wenn Sie jedoch viele Verknüpfungen für Tabellen mit Verknüpfungsbedingungen durchführen, kann eine indizierte Ansicht die Leistung erheblich verbessern.
quelle
Wenn Sie keine Funktion verwenden möchten, können Sie so etwas verwenden
Hoffe es wird helfen
quelle
Nein, Sie können den Parameter an die angezeigte Prozedur übergeben
quelle
Hier ist eine Option, die ich bisher noch nicht gesehen habe:
Fügen Sie einfach die Spalte, die Sie einschränken möchten, zur Ansicht hinzu:
quelle
Sie können umgehen, nur um die Ansicht auszuführen, SQL wird Wein und Weinen, aber tun Sie dies einfach und führen Sie es aus! Du kannst nicht retten.
quelle
Ihre Ansicht kann auf eine externe Tabelle verweisen, die Ihre Parameter enthält.
Wie bereits erwähnt, kann die Ansicht in SQL Server keine externen Eingabeparameter enthalten. Mit CTE können Sie jedoch leicht eine Variable in Ihrer Ansicht vortäuschen. Sie können es in Ihrer Version von SQL Server testen.
Ausbeute:
auch über
JOIN
auch über
CROSS APPLY
quelle
Ich habe eine Idee, die ich noch nicht ausprobiert habe. Du kannst tun:
Ihre Parameter werden in der Config-Tabelle gespeichert und geändert.
quelle
Ich habe diese Aufgabe für meine Bedürfnisse wie folgt realisiert
quelle