Procedimiento para llamar al entorno de ejecución de .NET en las extensiones de lenguaje de SQL Server

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores

La función de Extensiones del lenguaje de SQL Server usa el procedimiento almacenado del sistema sp_execute_external_script como interfaz para llamar al tiempo de ejecución de NET.

En este artículo de procedimientos se explican los detalles de implementación del código C# que se ejecuta en SQL Server.

Dónde se deben colocar las clases de C#

Para llamar al código C# en SQL Server, cargue bibliotecas de .NET compiladas (DLL) y otras dependencias en la base de datos mediante el DDL de la biblioteca externa. Para obtener más información, consulte Creación de un archivo DLL de .NET a partir de proyecto de C#.

Principios básicos

A continuación se muestran algunos principios básicos a la hora de ejecutar C# en SQL Server.

  • Las clases de .NET personalizadas compiladas deben existir en archivos DLL.

  • El método C# al que se está llamando se debe proporcionar en el parámetro script del procedimiento almacenado.

  • Si la clase pertenece a un paquete, se debe proporcionar packageName.

  • params sirve para pasar parámetros a una clase de C#. No se admiten las llamadas a un método que requiere argumentos. Por lo tanto, los parámetros son la única forma de pasar valores de argumento al método.

Nota:

Esta nota modifica las operaciones admitidas y no admitidas que son específicas de C# en SQL Server 2019 (15.x) y versiones posteriores. En el procedimiento almacenado, se admiten parámetros de entrada, pero no parámetros de salida.

Llamada al código C#

El procedimiento almacenado del sistema sp_execute_external_script es la interfaz que se usa para llamar al entorno de ejecución de .NET. En el ejemplo siguiente se muestra un sp_execute_external_script que usa la extensión de .NET, así como parámetros para especificar la ruta de acceso, la secuencia de comandos y el código personalizado.

Nota:

No es necesario definir el método al que se va a llamar. De forma predeterminada, se llama a un método denominado Execute. Esto significa que debe seguir el SDK de extensibilidad de Microsoft para C# para SQL Server e implementar un método Execute en la clase C#.

DECLARE @param1 INT;

SET @param1 = 3;

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'<PackageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

Usar una biblioteca externa

En SQL Server 2019 (15.x) y versiones posteriores, puede usar bibliotecas externas para el lenguaje C# en Windows. Puede compilar las clases en un archivo DLL y cargar el archivo DLL junto con otras dependencias en la base de datos mediante el DDL CREATE EXTERNAL LIBRARY.

Ejemplo de cómo cargar un archivo DLL con la biblioteca externa:

CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO

Al crear una biblioteca externa, SQL Server obtiene acceso automático a las clases de C# y no será necesario establecer ningún permiso especial en la ruta.

El código que se muestra a continuación es un ejemplo de cómo llamar al método Execute en una clase MyClass desde un paquete MyPackage, cargado como biblioteca externa:

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'MyPackage.MyClass',
    @input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));

Para obtener más información, vea CREATE EXTERNAL LIBRARY.