How to call the .NET runtime in SQL Server Language Extensions
Applies to: SQL Server 2019 (15.x) and later versions
The SQL Server Language Extensions feature uses the sp_execute_external_script system stored procedure as the interface to call the .NET runtime.
This how-to article explains implementation details for C# code that executes on SQL Server.
Where to place C# classes
You call C# code in SQL Server by uploading compiled .NET libraries (DLLs) and other dependencies into the database using the external library DDL. For more information, see Create a .NET DLL from a C# project.
Basic principles
The following are some basic principles when executing C# on SQL Server.
Compiled custom .NET classes must exist in DLL files.
The C# method you're calling must be provided in the
script
parameter on the stored procedure.If the class belongs to a package, the
packageName
must be provided.params
is used to pass parameters to a C# class. Calling a method that requires arguments isn't supported. Therefore, parameters are the only way to pass argument values to your method.
Note
This note restates supported and unsupported operations specific to C# in SQL Server 2019 (15.x) and later versions. On the stored procedure, input parameters are supported, while output parameters aren't supported.
Call C# code
The sp_execute_external_script system stored procedure is the interface used to call the .NET runtime. The following example shows an sp_execute_external_script
using the .NET extension, and parameters for specifying path, script, and your custom code.
Note
You don't need to define which method to call. By default, a method called Execute
is called. This means that you need to follow the Microsoft Extensibility SDK for C# for SQL Server and implement an Execute
method in your C# class.
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;
Use external library
In SQL Server 2019 (15.x) and later versions, you can use external libraries for the C# language on Windows. You can compile your classes into a DLL file and upload the DLL and other dependencies into the database using the CREATE EXTERNAL LIBRARY DDL.
Example of how to upload a DLL file with external library:
CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO
When it creates an external library, SQL Server automatically has access to the C# classes, and you don't need to set any special permissions to the path.
The following code is an example of calling the Execute
method in class MyClass
from a package MyPackage
, uploaded as an external library:
EXEC sp_execute_external_script
@language = N'dotnet',
@script = N'MyPackage.MyClass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
For more information, see CREATE EXTERNAL LIBRARY.