SQL 2005 CLR User-Defined Functions
Hallo zusammen,
Um mich auf die Microsoft Prüfung Microsoft SQL Server 2005 - Implementieren und Verwalten vorzubereiten, habe ich mich auch mal mit den .NET CLR Funktionen von SQL Server 2005 befasst. By the way - ich habe die Prüfung bestanden :o)
In VB.Net Express habe ich eine Klassenbibliothek angelegt mit dem Namespace "sqlclr"
Die Klasse heisst "CLRclass" und hat die Funktionen "myAddition" und "myPet" und die Methode "HelloWorld"
Im SQL Server Management Studio habe ich dann folgende Befehle ausgeführt:
/********************************************************************
* SQL2005 DEMO with .NET CLR
* Copyright c April 2009 - Andres Bohren / http://blog.icewolf.ch
*
* SQL Server Data Types and Their .NET Framework Equivalents
* http://msdn.microsoft.com/de-de/library/ms131092(SQL.90).aspx
********************************************************************/
/*ENABLE CLR T-SQL*/
SP_CONFIGURE 'clr enabled', 1
GO
RECONFIGURE
/*ENABLE CLR GUI*/
1. Explore "SQL Server 2005/Configuration Tools/Surface Area Configuration" in your Start menu.
2. Select "Surface Area Configuration for Features"
3. You will find "CLR Integration" option, activate it and save.
/*CREATE ASSEMBLY*/
CREATE ASSEMBLY icewolfCLR
FROM'D:\Data\icewolfCLR.dll'
WITH PERMISSION_SET = SAFE
/*CREATE FUNCTION*/
CREATE FUNCTION myPet(@pet nvarchar(3))
RETURNS nvarchar(4)
AS
EXTERNAL NAME icewolfCLR.[sqlclr.CLRclass].myPet
CREATE FUNCTION myAddition(@summand1 int, @summand2 int)
RETURNS int
AS
EXTERNAL NAME icewolfCLR.[sqlclr.CLRclass].myAddition
/*CREATE PROCEDURE*/
CREATE PROCEDURE HelloWorld
AS EXTERNAL NAME icewolfCLR.[sqlclr.myAdd].HelloWorldSub
/*Execute the new CLR Function*/
SELECT dbo.myPet('dog')
SELECT dbo.myaddition(6,5)
EXEC HelloWorld
/*DROP FUCTION*/
DROP Function myPet
DROP Function myAddition
/*DROP PROCEDURE*/
DROP PROCEDURE HelloWorld
/*DROP ASSEMBLY*/
DROP ASSEMBLY icewolfCLR
Fazit, eigentlich gar nicht so schwer eingene Funktionen mittels .NET Assemblys in SQL 2005 zu benutzen. Am meisten Zeit habe ich mit Konvertierungsproblemen zwischen SQL und .NET Datentypen gekämpft. Hier eine gute Hilfe von der MSDN Library.
Damit ihr das nicht von Hand nachprogrammieren müsst, gibt es die ganzen Files hier zum Download