Come chiamare il runtime .NET nelle estensioni del linguaggio di SQL Server

Si applica a: SQL Server 2019 (15.x) e versioni successive

Le funzionalità estensioni del linguaggio di SQL Server usa la stored procedure di sistema sp_execute_external_script come interfaccia per chiamare il runtime .NET.

Questo articolo illustra i dettagli di implementazione per il codice C# eseguito in SQL Server.

Dove inserire le classi C#

Il codice C# viene chiamato in SQL Server caricando librerie .NET compilate (DLL) e altre dipendenze nel database usando il DDL della libreria esterna. Per altre informazioni, vedere Creare un file DLL .NET da un progetto C#.

Principi di base

Di seguito sono riportati alcuni principi di base per l'esecuzione di C# in SQL Server.

  • Le classi .NET personalizzate compilate devono esistere in file DLL.

  • Il metodo C# che si sta chiamando deve essere specificato nel parametro script nella stored procedure.

  • Se la classe appartiene a un pacchetto, è necessario specificare il packageName.

  • params viene usato per passare parametri a una classe C#. La chiamata a un metodo che richiede argomenti non è supportata. Pertanto, i parametri sono l'unico modo per passare i valori degli argomenti al metodo.

Nota

Questa nota riporta le operazioni supportate e non supportate specifiche di C# in SQL Server 2019 (15.x) e versioni successive. Nella stored procedure sono supportati i parametri di input, mentre i parametri di output non sono supportati.

Chiamare il codice C#

La stored procedure di sistema sp_execute_external_script è l'interfaccia usata per chiamare il runtime .NET. L'esempio seguente illustra un sp_execute_external_script che usa l'estensione .NET e i parametri per specificare il percorso, lo script e il codice personalizzato.

Nota

Non è necessario definire il metodo da chiamare. Per impostazione predefinita, viene chiamato un metodo denominato Execute. Ciò significa che è necessario seguire Microsoft Extensibility SDK per C# in SQL Server e implementare un metodo Execute nella classe 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;

Usare una libreria esterna

In SQL Server 2019 (15.x) e versioni successive è possibile usare librerie esterne per il linguaggio C# su Windows. È possibile compilare le classi in un file DLL e caricare la DLL e altre dipendenze nel database usando il DDL CREATE EXTERNAL LIBRARY.

Esempio di come caricare un file DLL con libreria esterna:

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

Creando una libreria esterna, SQL Server avrà automaticamente accesso alle classi C# e non sarà necessario impostare autorizzazioni di accesso speciali per il percorso.

Il codice seguente è un esempio di chiamata di un metodo Execute in una classe MyClass da un pacchetto MyPackage, caricato come libreria esterna:

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

Per altre informazioni, vedere CREATE EXTERNAL LIBRARY.