共用方式為


元件 - 實作

適用於:SQL Server

本主題提供下列區域的相關信息,可協助您在資料庫中實作和使用元件:

  • 建立元件

  • 修改元件

  • 卸除、停用和啟用元件

  • 管理元件版本

建立組件

元件是使用 Transact-SQL CREATE ASSEMBLY 語句在 SQL Server 中建立,或使用元件輔助編輯器在 SQL Server Management Studio 中建立。 此外,在 Microsoft Visual Studio 中部署 SQL Server 專案,會在針對專案指定的資料庫中註冊元件。 如需詳細資訊,請參閱 Deploying CLR Database Objects

使用 Transact-SQL 建立元件

使用 SQL Server Management Studio 建立元件

修改元件

使用 Transact-SQL ALTER ASSEMBLY 語句或在 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 已啟用伺服器組態選項

停用和啟用元件執行

管理元件版本

將元件上傳至實例 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 執行。 不過,SQL Server 並不保證更新 CLR 元件時,計算數據行、索引、索引檢視或表達式會與基礎例程和類型一致。 當您執行 ALTER ASSEMBLY 時請小心,以確保表達式的結果與以儲存在元件中的表示式為基礎的值之間沒有不相符。

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

SQL Server 會將訊息張貼至 Windows 應用程式事件記錄檔,指出元件已修改數據表中未核取的數據。 然後,SQL Server 會將包含相依於元件之數據的任何數據表標示為未核取的數據。 sys.tables 目錄檢視的has_unchecked_assembly_data數據行包含包含未核取數據的數據表值 1,而沒有未核取數據的數據表則為 0。

若要解決未核取數據的完整性,請針對具有未核取數據的每個數據表執行 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS。 如果 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS失敗,您必須刪除無效的數據表數據列,或修改元件程式代碼以解決問題,然後發出其他 ALTER ASSEMBLY 語句。

ALTER ASSEMBLY 會變更組件版本。 元件的文化特性和公鑰令牌會維持不變。SQL Server 不允許使用相同名稱、文化特性和公鑰註冊不同版本的元件。

與適用於版本系結的計算機原則互動

如果使用發行者原則或全計算機系統管理員原則將儲存在 SQL Server 中的元件參考重新導向至特定版本,您必須執行下列其中一項:

  • 請確定這個重新導向的新版本是在資料庫中。

  • 將任何語句修改為計算機或發行者原則的外部原則檔案,以確保它們參考資料庫中的特定版本。

否則,嘗試將新的元件版本載入 SQL Server 實例將會失敗。

更新元件的版本

另請參閱

元件 (資料庫引擎)
取得組件的相關資訊