Microsoft SQL Server
Common Language Runtime Integration
Ricerca…
Abilita CLR sul database
Le procedure CLR non sono abilitate per impostazione predefinita. È necessario eseguire le seguenti query per abilitare CLR:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Inoltre, se alcuni moduli CLR necessitano di un accesso esterno, è necessario impostare la proprietà TRUSTWORTHY su ON nel proprio database:
ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON
Aggiunta di .dll che contiene moduli CLR Sql
Procedure, funzioni, trigger e tipi scritti nelle lingue .Net sono memorizzati in file .dll. Una volta creato il file .dll contenente le procedure CLR, è necessario importarlo in SQL Server:
CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
PERMISSION_SET è sicuro per impostazione predefinita, il che significa che il codice in .dll non ha bisogno dell'autorizzazione per accedere a risorse esterne (ad esempio file, siti Web, altri server) e che non utilizzerà il codice nativo che può accedere alla memoria.
PERMISSION_SET = EXTERNAL_ACCESS viene utilizzato per contrassegnare gli assembly che contengono codice che accederà a risorse esterne.
puoi trovare informazioni sui file di assemblaggio CLR correnti nella vista sys.assemblies:
SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1
Creare la funzione CLR in SQL Server
Se hai creato la funzione .Net, l'hai compilata in .dll e l'hai importata nel server SQL come un assembly, puoi creare una funzione definita dall'utente che fa riferimento alla funzione in quell'assembly:
CREATE FUNCTION dbo.TextCompress(@input nvarchar(max))
RETURNS varbinary(max)
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress
È necessario specificare il nome della funzione e della firma con i parametri di input e i valori di ritorno che corrispondono alla funzione .Net. Nella clausola AS EXTERNAL NAME è necessario specificare il nome assembly, il nome spazio / classe in cui viene inserita questa funzione e il nome del metodo nella classe che contiene il codice che verrà esposto come funzione.
È possibile trovare informazioni sulle funzioni CLR utilizzando la seguente query:
SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'
Crea CLR Tipo definito dall'utente in SQL Server
Se hai creato la classe .Net che rappresenta un tipo definito dall'utente, lo hai compilato in .dll e lo hai importato nel server SQL come un assembly, puoi creare una funzione definita dall'utente che fa riferimento a questa classe:
CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]
È necessario specificare il nome del tipo che verrà utilizzato nelle query T-SQL. Nella clausola EXTERNAL NAME è necessario specificare nome assembly, spazio dei nomi e nome classe.
Creare la procedura CLR in SQL Server
Se hai creato il metodo .Net in una classe, lo hai compilato in .dll e lo hai importato nel server SQL come un assembly, puoi creare una stored procedure definita dall'utente che fa riferimento al metodo in quell'assembly:
CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max))
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething
È necessario specificare il nome della procedura e la firma con i parametri di input che corrispondono al metodo .Net. Nella clausola AS EXTERNAL NAME è necessario specificare il nome assembly, il nome spazio / classe in cui viene inserita questa procedura e il nome del metodo nella classe che contiene il codice che verrà esposto come procedura.