PDA

View Full Version : [SQLSERVER2005] Regular Expression


Joga3
20-03-2009, 10:20
Ciao a tutti,

ho la necessità di fare una query che include una Regular Expression (non particolarmente complessa)su una tabella presente in SQL Server 2005.

A quanto pare non si può, perlomeno non con la configurazione base di SQL Server 2005.

Ho letto, in vari documenti, che posso essere incluse tramite il componente CLR del NETFRAMEWORK, ma va creato un assembly, che ad ora non sembra funzionare..

Qualcuno di voi ci ha mai sbattuto la testa?

Aiuti?

Grazie in anticipo:)

gugoXX
20-03-2009, 10:46
Ciao a tutti,

ho la necessità di fare una query che include una Regular Expression (non particolarmente complessa)su una tabella presente in SQL Server 2005.

A quanto pare non si può, perlomeno non con la configurazione base di SQL Server 2005.

Ho letto, in vari documenti, che posso essere incluse tramite il componente CLR del NETFRAMEWORK, ma va creato un assembly, che ad ora non sembra funzionare..

Qualcuno di voi ci ha mai sbattuto la testa?

Aiuti?

Grazie in anticipo:)


Ciao, allora ci sono 2 strade.
Se ti "accontenti" del FULL TEXT INDEX, nel senso che magari fa al caso tuo, allora e' sufficiente leggere un paio di documenti e poi procedere dato che SqlServer li supporta e anche abbastasnza bene.

Se invece devi per forza usare una regular expression, allora non mi risulta che vi siano in maniera nativa.
Puoi pero' creare una Funzione Custom in C#, che ben conosce le Regular Expression.
Per poterla fare basta che apri Visual Studio, crei un nuovo progetto di tipo Database, aggiungi una funzione (o una stored procedure) e poi fai il deploy.
Su SqlServer ti ritroverai una nuova funzione, il cui corpo non e' editabile o leggibile, ma che si potra' eseguire come tutte le altre funzioni, quindi ipotizzo per te nella clausole WHERE di qualche query.

Per studiare qualche esempio cerca un'implementazione delle funzioni di gruppo custom, che devono essere fatte appunto in questo modo.
Come ad esempio l'implementazione della GROUP_CONCAT, che serve per concatenare le stringhe di rercod diversi.

Joga3
20-03-2009, 11:13
Ciao, allora ci sono 2 strade.
Se ti "accontenti" del FULL TEXT INDEX, nel senso che magari fa al caso tuo, allora e' sufficiente leggere un paio di documenti e poi procedere dato che SqlServer li supporta e anche abbastasnza bene.

No, sono obbligato ad utilizzare una regular expression :(

Se invece devi per forza usare una regular expression, allora non mi risulta che vi siano in maniera nativa.
Puoi pero' creare una Funzione Custom in C#, che ben conosce le Regular Expression.
Per poterla fare basta che apri Visual Studio, crei un nuovo progetto di tipo Database, aggiungi una funzione (o una stored procedure) e poi fai il deploy.
Su SqlServer ti ritroverai una nuova funzione, il cui corpo non e' editabile o leggibile, ma che si potra' eseguire come tutte le altre funzioni, quindi ipotizzo per te nella clausole WHERE di qualche query.

Per studiare qualche esempio cerca un'implementazione delle funzioni di gruppo custom, che devono essere fatte appunto in questo modo.
Come ad esempio l'implementazione della GROUP_CONCAT, che serve per concatenare le stringhe di rercod diversi.

Ok, il problema e' il seguente:

Sul server dove c'è installato SQL SERVER 2005 non c'è e non posso installare Visual Studio 2005. Di conseguenza secondo te, posso installarmi Visual in locale, compilare la funzione e portarla sul server?

Guarda qui
http://www.codeproject.com/KB/string/SqlRegEx.aspx?display=PrintAll&fid=435652&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=2719744

Sto seguendo passo passo la creazione dell'ASSEMBLY, ma ho un problema con la DLL(presa dal web), provando a lanciare il comando(vedi il link)
CREATE ASSEMBLY [SqlRegEx] FROM 'C:\SqlRegEx.dll' WITH PERMISSION_SET = SAFE

Mi ritorna l'errore:
CREATE ASSEMBLY for assembly 'RegEx' failed because assembly 'RegEx' is malformed or not a pure .NET assembly.
Unverifiable PE Header/native stub.

Cmq grazie in anticipo, mi ha già risolto non pochi dubbi. :)

gugoXX
20-03-2009, 11:25
Sul server dove c'è installato SQL SERVER 2005 non c'è e non posso installare Visual Studio 2005. Di conseguenza secondo te, posso installarmi Visual in locale, compilare la funzione e portarla sul server?

Visual Studio puoi averlo dove vuoi, e' sufficiente che riesca a raggiungere l'istanza server, quindi la tua DevBox va benissimo.
Devi pero' almeno installare il .net Framework sul Server. Mi sembra anche di ricordare un mezzo casino di configurazione per infomare SqlServer su quale versione del Framework si trova davanti.



Guarda qui...

Quello che ti sta spiegando qui e' che, AVENDO gia' una DLL compilata in C#, questi sarebbero i passi necessari per fargliela conoscere a SqlServer.
Ma tutto cio' non e' necessario impararlo se il codice della funzione lo scrivi te in C#.
E' sufficiente cliccare con il destro sul progetto in Visual Studio e scegliere "Deploy".

Se invece come hai detto hai solo la DLL in mano perche' l'hai scaricata gia' compilata da qualche parte, allora devi copiarla sul server e seguire questa guida.
Ma come detto e' una strada che non ho mai seguito, e non ti saprei aiutare.

Joga3
20-03-2009, 11:31
Visual Studio puoi averlo dove vuoi, e' sufficiente che riesca a raggiungere l'istanza server, quindi la tua DevBox va benissimo.
Devi pero' almeno installare il .net Framework sul Server. Mi sembra anche di ricordare un mezzo casino di configurazione per infomare SqlServer su quale versione del Framework si trova davanti.
.
e' installato(versione 2.0).

Quello che ti sta spiegando qui e' che, AVENDO gia' una DLL compilata in C#, questi sarebbero i passi necessari per fargliela conoscere a SqlServer.
Ma tutto cio' non e' necessario impararlo se il codice della funzione lo scrivi te in C#.
E' sufficiente cliccare con il destro sul progetto in Visual Studio e scegliere "Deploy".

Se invece come hai detto hai solo la DLL in mano perche' l'hai scaricata gia' compilata da qualche parte, allora devi copiarla sul server e seguire questa guida.
Ma come detto e' una strada che non ho mai seguito, e non ti saprei aiutare.

Perfetto, credo di aver capito un pochino il giro da effetture. Provo a rimediare visual studio e faccio un tentativo.

Grazie veramente ;)