如何在 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。