分享方式:


如何在 SQL Server 語言延伸模組中呼叫 .NET 執行階段

適用於:SQL Server 2019 (15.x) 和更新版本

SQL Server 語言延伸模組功能會使用 sp_execute_external_script 系統預存程序,作為呼叫 NET 執行階段的介面。

此操作說明文章會針對在 SQL Server 上執行的 C# 程式碼,說明其實作詳細資料。

C# 類別的放置位置

您可以使用外部程式庫 DDL,將已編譯的 .NET 程式庫 (DLL) 和其他相依性上傳至資料庫,以在 SQL Server 中呼叫 C# 程式碼。 如需詳細資訊,請參閱從 C# 專案中建立 .NET DLL

基本原則

以下是在 SQL Server 上執行 C# 時的一些基本原則。

  • 已編譯的自訂 .NET 類別必須存在於 DLL 檔案中。

  • 您要呼叫的 C# 方法必須在預存程序的 script 參數中提供。

  • 如果類別屬於套件,則必須提供 packageName

  • params 用來將參數傳遞至 C# 類別。 不支援呼叫需要引數的方法。 因此,參數是將引數值傳遞給方法的唯一方式。

注意

此附註會重述 SQL Server 2019 (15.x) 和更新版本中支援與不支援的 C# 專屬操作。 在預存程序中,支援輸入參數,但不支援輸出參數。

呼叫 C# 程式碼

sp_execute_external_script 系統預存程序是用來呼叫 .NET 執行階段的介面。 下列範例顯示使用 .NET 延伸模組的 sp_execute_external_script,以及用來指定路徑、指令碼與自訂程式碼的參數。

注意

您不需要定義要呼叫的方法。 預設會呼叫名為 Execute 的方法。 這表示您必須依照適用於 SQL Server 的 Microsoft Extensibility SDK for C#,並在您的 C# 類別中實作 Execute 方法。

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;

使用外部程式庫

在 SQL Server 2019 (15.x) 和更新版本中,您可以在 Windows 上使用適用於 C# 語言的外部程式庫。 您可以將類別編譯到 DLL 檔案中,並使用 CREATE EXTERNAL LIBRARY DDL,將該 DLL 與其他相依性上傳至資料庫。

如何使用外部程式庫上傳 DLL 檔案的範例:

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

建立外部程式庫時,SQL Server 將會自動擁有 C# 類別的存取權,而且您不需要為該路徑設定任何特殊存取權限。

以下程式碼是從當作外部程式庫上傳的套件 MyPackage 中呼叫 MyClass 類別中 Execute 方法的範例:

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

如需詳細資訊,請參閱 CREATE EXTERNAL LIBRARY