Crear funciones CLR

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

Es posible crear un objeto de base de datos dentro de una instancia de SQL Server programada en un ensamblado creado en Common Language Runtime (CLR) de Microsoft .NET Framework. Los objetos de base de datos que pueden usar el modelo de programación enriquecido proporcionado por Common Language Runtime incluyen funciones de agregado, funciones, procedimientos almacenados, desencadenadores y tipos.

Para crear una función CLR en SQL Server se deben seguir los pasos detallados a continuación:

  • Definir la función como un método estático de una clase en un lenguaje admitido por .NET Framework. Para obtener más información sobre cómo programar funciones en Common Language Runtime, vea Funciones CLR definidas por el usuario. A continuación, compilar la clase para generar un ensamblado en .NET Framework mediante el compilador del lenguaje adecuado.

  • Registrar el ensamblado en SQL Server mediante la instrucción CREATE ASSEMBLY. Para obtener más información sobre los ensamblados en SQL Server, vea Ensamblados (motor de base de datos).

  • Crear la función que hace referencia al ensamblado registrado mediante la instrucción CREATE FUNCTION .

La ejecución de código CLR está desactivada de forma predeterminada en SQL Server. Puede crear, modificar y quitar objetos de base de datos que hagan referencia a módulos de código administrado, pero estas referencias no se ejecutarán en SQL Server a menos que habilite la opción clr enabled mediante sp_configure (Transact-SQL).

La implementación de un SQL Server Project en Microsoft Visual Studio registra un ensamblado en la base de datos especificada para el proyecto. La implementación del proyecto también crea funciones CLR en la base de datos para todos los métodos anotados con el atributo SqlFunction . Para más información, consulte Deploying CLR Database Objects.

Acceso a recursos externos

Las funciones CLR se pueden utilizar para obtener acceso a recursos externos tales como archivos, recursos de red, servicios web y otras bases de datos (incluidas las instancias remotas de SQL Server). Para ello, es posible utilizar diversas clases en .NET Framework, como por ejemplo System.IO, System.WebServices, System.Sql, etc. El ensamblado que contiene estas funciones debe estar configurado por lo menos con el conjunto de permisos EXTERNAL_ACCESS que tiene este objetivo. Para obtener más información, consulte CREATE ASSEMBLY (Transact-SQL). El proveedor administrado cliente SQL se puede utilizar para obtener acceso a instancias remotas de SQL Server. Sin embargo, las conexiones de bucle invertido al servidor de origen no se admiten en las funciones CLR.

Para crear, modificar o quitar ensamblados de SQL Server

Para crear una función CLR

Acceso al código nativo

Las funciones CLR pueden acceder al código nativo (no administrado), como el código escrito en C o C++, mediante el uso de PInvoke desde código administrado (consulte Llamada a funciones nativas desde código administrado para obtener más información). Esto le permite reutilizar el código heredado como UDF de CLR o escribir UDF críticas para el rendimiento en código nativo y requiere el uso de un ensamblado UNSAFE. Vea CLR Integration Code Access Security para conocer advertencias acerca del uso de ensamblados UNSAFE.

Consulte también