分享方式:


建立 CLR 函數

適用於:SQL Server 2016 (13.x) 和更新版本

您可以在 SQL Server 執行個體中建立資料庫物件,這些物件是透過 Microsoft .NET Framework 通用語言執行平台 (CLR) 中建立的組件所撰寫。 可以使用 Common Language Runtime 所提供的豐富程式設計模型的資料庫物件,包含彙總函式、函數、預存程序、觸發程序以及類型。

在 SQL Server 中建立 CLR 函數包含下列步驟:

  • 以 .NET Framework 支援的語言,將函數定義成類別的靜態方法。 如需如何以 Common Language Runtime 設計函數的詳細資訊,請參閱 CLR 使用者定義函數。 然後,使用適當的語言編譯器編譯類別,在 .NET Framework 中建立組件。

  • 使用 CREATE ASSEMBLY 陳述式,在 SQL Server 中登錄組件。 如需 SQL Server 中組件的詳細資訊,請參閱組件 (資料庫引擎) (機器翻譯)

  • 使用 CREATE FUNCTION 陳述式建立參考已註冊組件的函數。

在 SQL Server 中,執行 CLR 程式碼的功能預設為關閉。 您可以建立、改變和卸除參考受控程式碼模組的資料庫物件,但是除非使用 sp_configure (Transact-SQL) 來啟用 clr enabled 選項,否則這些參考不會在 SQL Server 中執行。

在 Microsoft Visual Studio 中部署 SQL Server 專案,便會在已指定給專案的資料庫中註冊組件。 部署專案也會在資料庫中,為所有以 SqlFunction 屬性註解的方法建立 CLR 函數。 如需詳細資訊,請參閱 Deploying CLR Database Objects

存取外部資源

CLR 函數可用以存取外部資源,例如,檔案、網路資源、Web Service、其他資料庫 (包含 SQL Server 的遠端執行個體)。 這可透過使用 .NET Framework 中的各種類別來達成,例如 System.IOSystem.WebServicesSystem.Sql 等等。 包含這類函數的組件應該至少使用 EXTERNAL_ACCESS 權限來設定才能達成此目的。 如需詳細資訊,請參閱 CREATE ASSEMBLY (Transact-SQL)。 SQL 用戶端受控提供者可用以存取 SQL Server 的遠端執行個體。 不過,CLR 函數不支援連至原始伺服器的回送連線。

若要建立、修改或卸除 SQL Server 中的組件

若要建立 CLR 函數

存取機器碼

CLR 函數可透過 PInvoke 從受控程式碼中存取機器碼 (未受控的程式碼),例如以 C 或 C++ 撰寫的程式碼 (如需詳細資訊,請參閱從受控程式碼呼叫原生函數)。 這可讓您重複使用舊版程式碼作為 CLR UDF,或以機器碼撰寫有效能關鍵作用的 UDF,而且需要使用 UNSAFE 元件。 如需了解使用 UNSAFE 組件的注意事項,請參閱 CLR 整合程式碼存取安全性

另請參閱