Tutorial SQL

Przykłady, tutorial, gotowe rozwiązania sql.

Kategoria: MS SQL


Tworzenie procedur CLR na przykładzie regural expression


Przykład będzie demonstrował jak stworzyć procedurę, funkcje CLR w środowisku Microsoft Sql Serwer. Procedura CLR pozwala na stworzenie w np. Visual Studio kodu użytkownika, który może być wykorzystany na serwerze MS SQL. Przykład opierał będzie się o jak, że przydatne funkcje regular expression.

Zaczniemy od stworzenie kodu w VS lub notepad++:


using System;

using System.Data.SqlTypes;			

using System.Collections;			

using System.Text.RegularExpressions;		

using Microsoft.SqlServer.Server;				



public partial class SqlRE

{

	[SqlFunction]

	public static bool Like(string text, string pattern)

	{

		Match match = Regex.Match(text, pattern);

		return (match.Value != String.Empty);

	}

	[SqlFunction]

	public static int LikeIndex(string text, string pattern)

	{

		Match match = Regex.Match(text, pattern);

        return match.Index;

	}

}	




SQL clr kompilacja do pliku dll



Bibliotek możemy z kąpilować za pomocą VS lub programu konsolowego CSC dla C# lub VBC dla VB.NET. Jako przykład podam te drugie rozwiązanie ponieważ nie zawsze mamy możliwość pisania korzystania z VS w wersji professjonal.

Zapisujemy nasz kod do pliku regex.cs i wywołujemy z konsoli kod:

C:\\Windows\\Microsoft.NET\\Framework\\v3.5>csc.exe /target:library /out:c:\\Users\\User\\Desktop\\reg.dll C:\\Users\\admin\\User\\regex.cs

W wyniku tej operacji od trzymamy plik reg.dll by go umieścić na serwerze najlepiej go skopiować na serwer z bazą MS SQL i wykonać kod.


--uruchamianie procedur CLR na serwerze

EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1;

RECONFIGURE;

GO

 

EXEC SP_CONFIGURE 'CLR ENABLED', 1

RECONFIGURE

GO

 

-- usuwanie funkcji jeżeli istnieje

IF OBJECT_ID ('like') IS NOT NULL

 DROP FUNCTION dbo.[like]

go



IF OBJECT_ID ('likeIndex') IS NOT NULL

 DROP FUNCTION dbo.[likeIndex]

go

 

-- usuwamy Assemby jeżeli istnieje

 

IF EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = 'regex')

 DROP ASSEMBLY [regex]

go



--dodawanie biblioteki

CREATE ASSEMBLY [regex]

AUTHORIZATION [dbo]

FROM 'D:\\regex.dll'

WITH PERMISSION_SET = SAFE

go



--tworzenie funckji

CREATE FUNCTION [dbo].[like](@Text nvarchar(max), @Pattern nvarchar(255))

RETURNS bit WITH EXECUTE AS CALLER

AS

EXTERNAL NAME [regex].[SqlRE].[Like]

go





CREATE FUNCTION [dbo].[LikeIndex](@Text nvarchar(max), @Pattern nvarchar(255))

RETURNS int WITH EXECUTE AS CALLER

AS

EXTERNAL NAME [regex].[SqlRE].[LikeIndex]

go





select dbo.[like]('Cos tama cos tam','[a-z]{3}a')



select dbo.[likeIndex]('Cos tama cos tam','[a-z]{3}a')



Po wykonaniu powyższego kodu możemy korzystać z funkcji i regualr expression na naszym serwerze. Oczywiście funkcje to nie jedyne zastosowanie bo w CLR możemy tworzyć również procedury treegery, funkcje agregujące trzeba się jedynie odwołać do odpowiedniej przestrzeni nazw w naszym kodzie:

- Microsoft.SqlServer.Server.SqlFunction()

- Microsoft.SqlServer.Server.SqlProcedure()

- Microsoft.SqlServer.Server.SqlTrigger()

- Microsoft.SqlServer.Server.SqlUserDefinedAggregate()

- Microsoft.SqlServer.Server.SqlUserDefinedType()






powrót















SQL-KURSY.pl poleca:

Rozpocznij kolonizacje egzoplanety

Książki
ksikaksikaksikaksikaksika

Copyright 2010-2011 Mariusz Kujawski adres mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional