Kategorie: SQL Server


#SQLCLR: Rückgabenlänge von Userdefined Functions

19. Dezember 2009 - 10:17 Uhr

Wer mit der im SQL Server 2005 / 2008 integrierten .NET-Unterstützung arbeitet, will diese Funktionalitäten recht schnell nicht mehr missen – wird aber über kurz oder lang auch darüber stolpern, dass etwa die Rückgabelänge von Zeichenketten auf 8 KByte beschränkt ist. Das mag zwar nach viel klingen, aber wenn man ein XML-Fragment zurückgeben möchte, stößt man recht zuverlässig an diese Grenze und fängt sich eine TruncationException ein.

Eine gewöhnliche Userdefined Function in C# sieht etwa so aus:

[SqlFunction]
public static SqlString Foo(String input) { ... }

Sowohl Rückgabe, als auch der Übergabeparameter input sind hier auf eine Größe von maximal 8 KByte beschränkt. Wem das nicht ausreicht, der muss das SqlFacet-Attribut verwenden, das sich sowohl oberhalb der Funktion, als auch vor dem Übergabeparameter notieren lässt:

[SqlFunction]
[return: SqlFacet(MaxSize = -1)]
public static SqlString Foo([SqlFacet(MaxSize = -1)] String input) { ... }

Problem gelöst: Die MaxSize-Angabe definiert, dass es keine maximale Größe für den Parameter oder die Rückgabe mehr geben soll. Nach dem erneuten Bereitstellen der Assembly im SQL Server sollte es keine TruncationException mehr geben.

Kommentieren » | .NET, SQL Server, Tipp