共用方式為


實作組件

本主題提供下列部分的資訊,協助您實作和使用資料庫中的組件:

  • 建立組件

  • 修改組件

  • 卸除、停用和啟用組件

  • 管理組件版本

建立組件

組件是使用 Transact-SQL CREATE ASSEMBLY 陳述式在 SQL Server 中建立,或使用 Assembly Assisted Editor 在 SQL Server Management Studio 中建立。此外,在 MicrosoftVisual Studio 中部署 SQL Server 專案,還會在已指定給專案的資料庫中註冊組件。如需詳細資訊,請參閱<部署 CLR 資料庫物件>。

若要使用 Transact-SQL 建立組件

若要使用 SQL Server Management Studio 建立組件

修改組件

組件是使用 Transact-SQL ALTER ASSEMBLY 陳述式在 SQL Server 中修改,或使用 Assembly Assisted Editor 在 SQL Server Management Studio 中修改。當您要執行下列動作時可以修改組件:

  • 上載較新版的二進位編碼檔案組件,以變更組件的實作。如需詳細資訊,請參閱本主題稍後的「管理組件版本」一節。

  • 變更組件的權限集。如需詳細資訊,請參閱<設計組件>。

  • 變更組件的可見性。可見的組件可在 SQL Server 中用來參考。看不見的組件則無法使用,即使已在資料庫中上載它們也一樣。依預設,上載至 SQL Server 執行個體的組件是可見的。

  • 加入或卸除與組件關聯的偵錯或來源檔。

若要使用 Transact-SQL 修改組件

若要使用 SQL Server Management Studio 修改組件

卸除、停用和啟用組件

使用 Transact-SQL DROP ASSEMBLY 陳述式或 SQL Server Management Studio 卸除組件。

若要使用 Transact-SQL 卸除組件

若要使用 SQL Server Management Studio 卸除組件

依預設,在 SQL Server 中建立的所有組件都會停用執行。您可以使用 sp_configure 系統預存程序的 clr enabled 選項,來停用或啟用在 SQL Server 中上載的所有組件的執行。停用組件的執行可防止執行 Common Language Runtime (CLR) 函數、預存程序、觸發程序、彙總和使用者定義型別,並可停止那些正在執行的。停用組件的執行並不會停用建立、修改或卸除組件的功能。如需詳細資訊,請參閱<clr enabled 選項>。

若要停用和啟用組件執行

管理組件版本

在將組件上載至 SQL Server 執行個體時,組件是在資料庫系統目錄中儲存和管理。在 Microsoft.NET Framework 中對組件定義所做的變更,應該傳播至儲存在資料庫目錄的組件中。

當您必須修改組件時,您必須發出 ALTER ASSEMBLY 陳述式來更新資料庫中的組件。這將會使組件更新至保存其實作的最新 .NET Framework 模組副本。

ALTER ASSEMBLY 陳述式的 WITH UNCHECKED DATA 子句可指示 SQL Server 重新整理那些甚至是與在資料庫中的保存資料相依之組件。特別是,如果下列任一項存在,您就必須指定 WITH UNCHECKED DATA:

  • 透過 Transact-SQL 函數或方法直接或間接參考組件中的方法之保存的計算資料行。

  • 相依於組件的 CLR 使用者定義型別資料行,以及實作 UserDefined (非原生) 序列化格式之類型的資料行。

警告注意事項警告

在未指定 WITH UNCHECKED DATA 的情況下,如果新組件版本影響資料表、索引或其他永續性站台中現有的資料,SQL Server 將嘗試阻止 ALTER ASSEMBLY 執行。不過,當 CLR 組件更新時,SQL Server 並不保證計算資料行、索引、索引檢視或運算式都會與基礎常式及類型保持一致。執行 ALTER ASSEMBLY 時請小心,以確定運算式結果與儲存在組件中以該運算式為基礎的值之間相符。

只有 db_ownerdb_ddlowner 固定資料庫角色的成員,可以使用 WITH UNCHECKED DATA 子句來執行 ALTER ASSEMBLY。

SQL Server 會在 Windows 應用程式事件記錄公佈訊息,說明已使用資料表中未檢查的資料修改過組件。 SQL Server 接著會在有未檢查的資料時,標示任何包含與組件相依的資料之資料表。sys.tables 目錄檢視的 has_unchecked_assembly_data 資料行,對於含有未檢查資料的資料表,包含的值為 1,對於沒有未檢查資料的資料表,包含的值為 0。

若要解決未檢查資料的完整性,請針對未檢查資料的每個資料表執行 DBCC CHECKTABLE。?如果 DBCC CHECKTABLE 失敗,您必須刪除無效的資料表資料列或修改組件程式碼來處理問題,然後發出其他的 ALTER ASSEMBLY 陳述式。

ALTER ASSEMBLY 會變更組件版本。組件的文化和公開金鑰 Token 仍然不變。SQL Server 不允許註冊具有相同名稱、文化特性及公開金鑰之不同版本的組件。

與版本繫結的電腦通用原則互動

如果儲存在 SQL Server 中的組件參考,使用發行者原則或電腦通用管理原則重新導向至特定版本,您必須執行下列其中一個動作:

  • 請確定是在資料庫中執行導向至新版本。

  • 請修改任何對於電腦或發行者原則的外部原則檔案之陳述式,以確定它們所參考的特定版本是在資料庫中。

否則,嘗試載入新組件版本至 SQL Server 執行個體將會失敗。

更新組件的版本