Gibt es in SQL Server 2005 ein Konzept für eine einmalige Verwendung oder eine lokale Funktion, die in einem SQL-Skript oder einer gespeicherten Prozedur deklariert ist? Ich möchte einige Komplexitäten in einem Skript, das ich schreibe, abstrahieren, aber es würde erfordern, eine Funktion deklarieren zu können.
Nur neugierig.
sql
sql-server
sql-server-2005
tsql
scripting
Mark Carpenter
quelle
quelle
Antworten:
Sie können
CREATE Function
am Anfang Ihres Skripts undDROP Function
am Ende anrufen .quelle
Sie können temporär gespeicherte Prozeduren erstellen wie:
in einem SQL-Skript, aber keine Funktionen. Sie könnten den Proc-Speicher jedoch in einer temporären Tabelle speichern lassen und diese Informationen später im Skript verwenden.
quelle
BEGIN
Schlüsselwort entferne und dasEND
Schlüsselwort durch ersetzeGO
.Mit allgemeinen Tabellenausdrücken können Sie im Wesentlichen Ansichten definieren, die nur im Rahmen Ihrer Anweisungen zum Auswählen, Einfügen, Aktualisieren und Löschen gültig sind. Je nachdem, was Sie tun müssen, können sie sehr nützlich sein.
quelle
Ich weiß, dass ich möglicherweise dafür kritisiert werde, dynamisches SQL vorzuschlagen, aber manchmal ist es eine gute Lösung. Stellen Sie einfach sicher, dass Sie die Auswirkungen auf die Sicherheit verstanden haben, bevor Sie dies berücksichtigen.
quelle
In Skripten haben Sie mehr Optionen und eine bessere Möglichkeit zur rationalen Zerlegung. Schauen Sie in den SQLCMD-Modus (Abfragemenü -> SQLCMD-Modus), insbesondere in die Befehle: setvar und: r.
Innerhalb einer gespeicherten Prozedur sind Ihre Optionen sehr begrenzt. Sie können eine Funktion nicht direkt mit dem Hauptteil einer Prozedur definieren. Das Beste, was Sie tun können, ist so etwas mit dynamischem SQL:
Dies entspricht in etwa einer globalen temporären Funktion, falls so etwas existiert. Es ist immer noch für andere Benutzer sichtbar. Sie können die @@ SPID Ihrer Verbindung anhängen, um den Namen zu eindeutig zu machen. Dies würde jedoch den Rest der Prozedur erfordern, um auch dynamisches SQL zu verwenden.
quelle
Folgendes habe ich in der Vergangenheit verwendet, um die Notwendigkeit einer skalaren UDF in MS SQL zu erfüllen:
Mit diesem Ansatz, bei dem eine globale Variable für das VERFAHREN verwendet wird, können Sie die Funktion nicht nur in Ihren Skripten, sondern auch in Ihren Dynamic SQL-Anforderungen verwenden.
quelle