Microsoft SQL Server
Integración de Common Language Runtime
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.