2008-09-04 5 views
12

Wie kann ich eine benutzerdefinierte Aggregatfunktion in MS SQL Server erstellen? Ein Beispiel würde viel helfen.Benutzerdefinierte Aggregatfunktionen in MS SQL Server?

+0

Dies [Beispiel] (http://msdn.microsoft.com/en-us/library/ms182741.aspx) und [dies] (http://msdn.microsoft.com/en-us/library/ms131056 .aspx) sollte dich in Gang bringen. – vzczc

Antwort

1

SQL Server 2000 unterstützt benutzerdefinierte Aggregatfunktionen nicht offiziell. Allerdings musste ich vor kurzem, dass die Funktionalität als auch, und ich habe diesen Artikel erhellend:
http://weblogs.sqlteam.com/jeffs/articles/1490.aspx

Es ist ein bisschen hack-ish, aber: es erfordert den Zugriff auf die sp_OA___ erweiterten Verfahren.

Die Zusammenfassung ist, dass man eine Aggregatfunktion mit einer Serie von vier Wrapper-Funktionen simulieren, von denen jede eine der folgenden Aufgaben:

  1. Erstellen Sie ein ActiveX-Objekt, das Zustand innerhalb der halten kann Abfrage. Rufen Sie diese vor die Abfrage ausführen.
    • Führen Sie die tatsächliche Aggregation mithilfe des ActiveX-Objekts durch.
    • Löschen Sie den ActiveX-Objektstatus auf GROUP BY-Grenzen
    • Zerstören Sie das Objekt. Rufen Sie diese nach die Abfrage und während der Fehlerbehandlung ausführen.

Sie sind dann Artikel 2 und 3 in der Auswahlliste für Ihre Anfrage, und Punkt 2 muss auch in einer bestehenden No-Effect-Aggregatfunktion wie MAX() oder MIN() gewickelt werden. Sie können diese Technik auch für kumulative Funktionen verwenden, um z. B. Zeilennummern zu verwenden.

Einige der Kommentare legen nahe, dass der Optimierer versuchen könnte, die Aggregationseffekte zu negieren, indem er die Aufrufe unter bestimmten Umständen wegoptimiert, obwohl ich erwarte, dass dies ein sehr seltener Fall wäre. Ich habe diese Frage jedoch gefunden, weil ich diese Warnungen ernst genug genommen habe, um weiter nach etwas Besserem zu suchen.