T-SQL Benutzerdefiniertes Überladen von Funktionen?
Ich verstehe, dass T-SQL ist nicht Objekt-orientiert. Ich brauche zum schreiben eine Reihe von Funktionen, die imitiert die Methode überladen in C#.
Ist das überladen von Funktionen unterstützt, die in T-SQL in irgendeiner Weise? Wenn es einen hack um dies zu tun, ist es empfehlenswert?
InformationsquelleAutor der Frage Nick | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keine Möglichkeit, dies zu tun.
Ich empfehle Ihnen, noch einmal über die Anforderung, "machen Sie äpfel, die Aussehen wie Orangen" ist oft schwer zu tun, und von zweifelhaftem Wert.
InformationsquelleAutor der Antwort John Saunders
Könnte passieren in einem sql_variantaber es kommt mit alle Arten von Gefahren, die um ihn herum; das kann man nicht wirklich nutzen starke Typisierung wie kann man mit OO-Sprachen und überladen.
Wenn Sie brauchen, um zu finden, die Basis-Typs in Ihrer Funktion, die Sie verwenden können, die
SQL_VARIANT_PROPERTY
Funktion.InformationsquelleAutor der Antwort Jeremy Smyth
Eine Sache, die ich getan haben, um erfolgreich zu schreiben, die Funktion in einer solchen Art und Weise, dass die Handhabung von null-Werten, und dann rufen Sie es mit null an Stelle der Parameter, die Sie würde gerne weglassen.
Beispiel:
Verwendet:
InformationsquelleAutor der Antwort benjaminjsanders
Können Sie übergeben in einem array von Werten in einen einzigen string ein und parse Sie aus mit dieser Technik, die von Erland Sommarskog.
Erstellen Sie eine Funktion mit einem
varchar(max)
parameter oder mehrere, wenn nötig, dann haben die parameter-Werte in dieser Zeichenkette wie:oder
oder
etc, Sie sind nur durch Ihre Fantasie begrenzt...
Verwenden Sie die Technik, die aus der Verbindung trennen Sie das array und die Verwendung der Programm-Logik, die diese Werte verwenden, wie Sie möchten.
InformationsquelleAutor der Antwort
Eine Lösung wäre die Nutzung der
sql_variant
Daten geben. Dieses Beispiel funktioniert so lange wie Sie den gleichen Datentyp für beide Werte. Gibt welchem Datentyp Sie senden.InformationsquelleAutor der Antwort Robbie Morris
Einer Lösung, die ich habe einige Glück mit der entweder die Erstellung einer Reihe von Funktionen, die jeder braucht einen anderen Datentyp - oder casting-alle-input NVARCHAR(MAX).
1. erstellen Sie eine Reihe von Funktionen, die jeder braucht einen anderen Datentyp
Problem: Duplizierung von code, und eine Menge Funktionen
2. Wandeln Sie alle input NVARCHAR(MAX)
Problem: weniger eleganten code als überlastung
InformationsquelleAutor der Antwort Martin Carlsson
Ich überlastungs-Funktionen die ganze Zeit, aber ich weiß zufällig, dass diese Art von Problemen sind oft stark abhängig von einer Plattform.
Auf unserer DB2-system, ich routinemäßig überladen wie die folgenden:
CREATE Function-Schema1.F1 (parm Datum)
gibt Datum
Rückkehr Datum + 1 Monat;
CREATE Function-Schema1.F1 (parm timestamp)
gibt Datum
return date(timestamp) + 1Monat;
Dies ist eigentlich ganz nützlich, wenn Sie mehrere Abfragen, die gleichartige Formatierung Anforderungen.
Das einzige problem habe ich gefunden, so weit, ist Sie besser sicher sein, dass Sie wollen, dass die Funktion, da die standard-drop-Funktion "schema"."name" fehlschlägt, weil es nicht bestimmen kann, welche Funktion zu fallen. Wenn jemand weiß wie man zu fallen überlastet sql-Funktionen, lassen Sie es mich wissen!
InformationsquelleAutor der Antwort Jay D. K.