Buscar..


Habilitar CLR en la base de datos

Los procedimientos CLR no están habilitados por defecto. Debe ejecutar las siguientes consultas para habilitar CLR:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Además, si algún módulo CLR necesita acceso externo, debe establecer la propiedad TRUSTWORTHY en ON en su base de datos:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

Adición de .dll que contiene módulos Sql CLR

Los procedimientos, funciones, disparadores y tipos escritos en lenguajes .Net se almacenan en archivos .dll. Una vez que cree el archivo .dll que contiene procedimientos CLR, debe importarlo a SQL Server:

CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS

PERMISSION_SET es seguro por defecto, lo que significa que el código en .dll no necesita permiso para acceder a recursos externos (por ejemplo, archivos, sitios web, otros servidores) y que no utilizará código nativo que pueda acceder a la memoria.

PERMISSION_SET = EXTERNAL_ACCESS se usa para marcar ensamblajes que contienen código que accederá a recursos externos.

Puede encontrar información sobre los archivos de ensamblaje de CLR actuales en la vista de sys.assemblies:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Crear función CLR en SQL Server

Si creó la función .Net, la compiló en .dll y la importó en el servidor SQL como un ensamblaje, puede crear una función definida por el usuario que haga referencia a la función en ese ensamblaje:

CREATE FUNCTION dbo.TextCompress(@input nvarchar(max)) 
RETURNS varbinary(max) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress 

Debe especificar el nombre de la función y la firma con los parámetros de entrada y los valores de retorno que coincidan con la función .Net. En la cláusula AS EXTERNAL NAME, debe especificar el nombre del conjunto, el espacio de nombres / nombre de la clase donde se coloca esta función y el nombre del método en la clase que contiene el código que se expondrá como función.

Puede encontrar información sobre las funciones CLR usando la siguiente consulta:

SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'

Crear CLR tipo definido por el usuario en SQL Server

Si ha creado una clase .Net que represente algún tipo definido por el usuario, lo compiló en .dll y lo importó en el servidor SQL como un ensamblaje, puede crear una función definida por el usuario que haga referencia a esta clase:

CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]

Debe especificar el nombre del tipo que se utilizará en las consultas T-SQL. En la cláusula EXTERNAL NAME, debe especificar el nombre del conjunto, el espacio de nombres y el nombre de la clase.

Crear procedimiento CLR en SQL Server

Si ha creado el método .Net en alguna clase, lo ha compilado en .dll y lo ha importado en el servidor SQL como un conjunto, puede crear un procedimiento almacenado definido por el usuario que haga referencia al método en ese conjunto:

CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max)) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething

Debe especificar el nombre del procedimiento y la firma con parámetros de entrada que coincidan con el método .Net. En la cláusula AS EXTERNAL NAME, debe especificar el nombre del conjunto, el espacio de nombres / nombre de la clase donde se coloca este procedimiento y el nombre del método en la clase que contiene el código que se expondrá como procedimiento.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow