Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

User Defined Aggregate für den MS SQL Server: First, Last und Concatenate von Strings

10. Juli 2009 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Als mit dem Microsoft SQL Server 2005 erstmals die Integration von CLR Assemblies ermöglicht wurden, gab es ein großes Hurra: Welch ungeahnte Möglichkeiten der Erweiterbarkeit. Das stimmt ja soweit auch, das NET Framework ist in der Funktionalität sehr umfangreich und biete wirklich viele Möglichkeiten.

Aber was den SQL Server betrifft, bin ich bezüglich der Verwendung von Assemblies doch recht skeptisch, insbesondere in Hinsicht auf die Performance: T-SQL ist einfach das performanteste zur Datenmanipulation und bisher konnte ich mit T-SQL alles erledigen, was eine Server-seitige Funktion erledigen sollte.

Aber neben den Standard-Objekten wie User Defined Functions (UDF), Stored Procedure (SP) und Trigger gibt es auch noch andere Erweiterungsmöglichkeiten. Eine davon ist die SqlUserDefinedAggregate (UDA), also selbst definierte / programmierte Aggregationen, wie SUM MAX MIN etc.

Womit wir auch schon beim Thema sind: In MDX gibt es Aggregationen FIRST und LAST, ja sogar Microsoft Access kennt diese; nur in T-SQL gibt es die nicht. Somit war das etwas, was ich für eine erste CLR Umsetzung angehen wollte. Zugegeben, eine Aggregation FIRST auf eine String Wert ist mindestens so sinnig, wie MIN oder MAX, aber es scheint zumindest Ressourcen-schonend zu sein.

Die Implementierung ist recht einfach: Es gibt eigentlich nur 4 Routinen, die man implementieren muss.

 

Public Sub Init()

Public Sub Accumulate(ByVal value As <SqlDataType>)

Public Sub Merge(ByVal value As <MyAggregationStructure>)

Public Function Terminate() As <SqlDataType>

 

Bevor ich hier lange Source-Scripte poste, die gibt es zum Download hier:

OlafHelper.SqlServer.Aggregate  (58 KB)

 

Es ist ein Microsoft Visual Basic 2008 Express Edition Projekt (ja, das geht auch mit Express Edition) mit allem drum und daran, also

-       Project Solution

-       Batch zum Erstellen eines „Strong Name Key“

-       Batch zum Kompilieren

-       Microsoft FxCop Projekt

-       Sql Script zum Anlegen der Objekte

-       Sql Script für einen Unit Test

 

P.S.: Natürlich muss die Sql Server Instanz für die Nutzung von CLR Assemblies konfiguriert sein.

Die einzelne Datei müssen den „örtlichen Gegebenheiten“ (also Pfade) angepasst werden.

Diesen Post teilen

Repost 0

Kommentiere diesen Post