Home > Articoli > SQLCLR Projects: come referenziare assembly esterne

SQLCLR Projects: come referenziare assembly esterne

Visual Studio 2005 mette a disposizione diversi template per la creazione di progetti SQLCLR. Creando un progetto ci accorgeremo ben presto che è impossibile utilizzare delle reference, salvo alcune predefinite dall’IDE.

Per ovviare a tale limitazione è necessario “sporcarsi le mani” all’interno dei file di progetto e seguire alcuni semplici passaggi.  La solution che ho creato e che potete scaricare qui è composta da due proget

  • MySQLCLRAssembly: il progetto SQLCLR al cui interno troviamo la funzione MyFunction
  • MyAssembly: la nostra assembly esterna o “di terze parti” che vogliamo usare nel progetto SQLCLR

Per prima cosa dobbiamo compilare il progetto MyAssembly , ottenendo nella cartella /bin/debug il file MyAssembly.dll

Il secondo step da compiere è quello di aprire con un qualsiasi editor di testo il file MySQLCLRAssembly.csproj (file di definizione del nostro progetto), identificare al suo interno la sezione <ItemGroup> ed aggiungere questo nuovo frammento xml: 

    <Reference Include="MyAssembly" >
    <SpecificVersion>False</SpecificVersion>
     <HintPath> C:\Projects\SQLCLRExternalReference\MyAssembly\bin\Debug\MyAssembly.dll </HintPath>
    </Reference>

Il path C:\Projects\MyAssembly\bin\Debug\MyAssembly.dll è il percorso dove risiede l’assembly compilata precedentemente.

Dopo aver salvato le modifiche riaprire il progetto MySQLCLRAssembly e verificare che nella lista delle reference ci sia MyAssembly.

A questo punto possiamo utilizzare la nostra nuova reference all’interno del nostro progetto SQL CLR:

using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using MyAssembly;

public class UserDefinedFunctions
{
    [SqlFunction]     public static SqlString MyFunction()
    {
        Myclass myclass = new Myclass();
        return new SqlString(myclass.DoSothing());
    }
};

L’ultimo passo per poter finalmente utilizzare la nostra funzione anche da T-SQL è l’operazione di deploy su SQL Server. Visual Studio mette a disposizione il comando "Deploy" per installare su SQL tutto il necessario, ma nel nostro caso particolare dovremmo utilizzare degli statement T-SQL manuali. Ecco come:

Carichiamo MyAssembly.dll

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [dbo] FROM ‘C:\Projects\SQLCLRExternalReference\MySQLCLRAssembly\bin\Debug\MyAssembly.dll’
WITH PERMISSION_SET = SAFE
GO

Carichiamo MySQLCLRAssembly.dll:

CREATE ASSEMBLY [MySQLCLRAssembly] AUTHORIZATION [dbo] FROM ‘C:\Projects\SQLCLRExternalReference\MySQLCLRAssembly\bin\Debug\MySQLCLRAssembly.dll’
WITH PERMISSION_SET = SAFE
GO

Eseguiamo lo statement di CREATE della nuova UDF:

 

CREATE FUNCTION [dbo].[MyFunction]()
RETURNS [nvarchar](4000) WHIT EXECUTE AS CALLER
AS
EXTERNAL NAME [MySQLCLRAssembly].[UserDefinedFunctions].[MyFunction] GO

 

Con quest’ ultimo passaggio saremo in grado di usufrire della funzione MyFunction che non farà nient’altro che chiamare il metodo DoSomething all’interno della nostra assembly custom MyAssembly.dll.

 

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Automazione delle attività di manutenzione in Azure SQL Database (2 Parte)

Introduzione Nell’articolo Automazione delle attività di manutenzione in Azure SQL Database abbiamo descritto le attività …