共用方式為


CLR 整合概觀

Common Language Runtime (CLR) 是Microsoft .NET Framework 的核心,並提供所有 .NET Framework 程式代碼的執行環境。 在 CLR 內執行的程式代碼稱為 Managed 程式代碼。 CLR 提供程式執行所需的各種功能及服務,包括 just-in-time (JIT) 編譯、配置及管理記憶體、強制使用型別安全性、例外處理、執行緒管理及安全性。 如需詳細資訊,請參閱 .NET Framework SDK。

透過裝載於 MICROSOFT SQL Server 的 CLR(稱為 CLR 整合),您可以在 Managed 程式代碼中撰寫預存程式、觸發程式、使用者定義函數、使用者定義型別和使用者定義的匯總。 由於 Managed 程式代碼會在執行前編譯成機器碼,因此在某些情況下,您可以達到顯著的效能提升。

Managed 程式代碼會使用程式代碼存取安全性 (CAS) 來防止元件執行特定作業。 SQL Server 使用 CAS 協助保護 Managed 程式代碼,並防止作系統或資料庫伺服器遭到入侵。

CLR 整合的優點

Transact-SQL 專為資料庫中的直接數據存取和作而設計。 雖然 Transact-SQL 擅長數據存取和管理,但這不是完整的程式設計語言。 例如,Transact-SQL 不支持陣列、集合、for-each 迴圈、位移位或類別。 雖然某些建構可以在 Transact-SQL 中模擬,但 Managed 程式代碼已整合這些建構的支援。 根據案例,這些功能可以提供在Managed程式碼中實作特定資料庫功能令人信服的理由。

Microsoft Visual Basic .NET 和 Microsoft Visual C# 提供面向物件功能,例如封裝、繼承和多型。 相關程式代碼現在可以輕鬆地組織成類別和命名空間。 當您使用大量的伺服器程式代碼時,這可讓您更輕鬆地組織和維護程序代碼。

Managed 程式代碼比 Transact-SQL 更適合用於計算和複雜的執行邏輯,而且具有許多複雜工作的廣泛支援,包括字串處理和正則表達式。 透過 .NET Framework 連結庫中找到的功能,您可以存取數千個預先建置的類別和例程。 您可以從任何預存程式、觸發程式或使用者定義函式輕鬆存取這些專案。 基類庫 (BCL) 包含提供字串作、進階數學作業、檔案存取、密碼編譯等功能的類別。

備註

雖然這些類別中有許多可從 SQL Server 中的 CLR 程式代碼中使用,但不適用於伺服器端使用的類別(例如視窗類別),則無法使用。 如需詳細資訊,請參閱 支援的 .NET Framework 連結庫

Managed 程式代碼的優點之一是類型安全性,或保證程式代碼只會以定義完善的允許方式存取類型。 在執行 Managed 程式代碼之前,CLR 會驗證程式代碼是否安全。 例如,會檢查程式代碼,以確保沒有讀取先前未寫入的記憶體。 CLR 也可以協助確保程式碼不會作 Unmanaged 記憶體。

CLR 整合提供改善效能的可能性。 如需詳細資訊,請參閱 CLR 整合的效能

在 Transact-SQL 與 Managed 程式代碼之間選擇

撰寫預存程式、觸發程式和使用者定義函式時,您必須做出的一個決策是使用傳統 Transact-SQL,或是 Visual Basic .NET 或 Visual C# 等 .NET Framework 語言。 當程式代碼大部分執行數據存取時,請使用 Transact-SQL,幾乎沒有程式性邏輯。 針對具有複雜邏輯的CPU密集函式和程式,或當您想要使用 .NET Framework 的 BCL 時,請使用 Managed 程式代碼。

選擇伺服器中的執行和用戶端中的執行

決定要使用 Transact-SQL 或 Managed 程式代碼的另一個因素是您希望程式代碼所在的位置、伺服器電腦或客戶端電腦。 Transact-SQL 和 Managed 程式代碼都可以在伺服器上執行。 這會將程式代碼和數據放在一起,並可讓您利用伺服器的處理能力。 另一方面,您可能想要避免將處理器密集型工作放在資料庫伺服器上。 現今大部分的用戶端電腦都非常強大,您可能想要盡可能將程式代碼放在用戶端上來利用此處理能力。 Managed 程式代碼可以在用戶端電腦上執行,而 Transact-SQL 則無法執行。

選擇擴充預存程式和Managed程式代碼

您可以建置擴充預存程式來執行 Transact-SQL 預存程式無法執行的功能。 不過,擴充預存程式可能會危害 SQL Server 進程的完整性,而驗證為類型安全的 Managed 程式代碼則無法。 此外,記憶體管理、線程和光纖的排程,以及同步處理服務在 CLR 和 SQL Server 的 Managed 程式代碼之間更深入整合。 透過 CLR 整合,您有比擴充預存程式更安全的方式,以撰寫您在 Transact-SQL 中無法執行工作所需的預存程式。 如需 CLR 整合和擴充預存程式的詳細資訊,請參閱 CLR 整合的效能

另請參閱

安裝 .NET Framework
CLR 整合的架構
來自 CLR 資料庫物件的數據存取
開始使用 CLR 整合