實作元件

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

  • 建立元件

  • 修改元件

  • 卸除、停用和啟用元件

  • 管理元件版本

建立元件

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

使用 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_owner 且固定資料庫角色db_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 變更元件版本。 元件的文化特性和公鑰令牌會維持不變。SQL Server 不允許使用相同名稱、文化特性和公鑰註冊不同版本的元件。

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

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

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

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

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

更新元件的版本

另請參閱

元件(資料庫引擎)
取得元件的相關信息