實作元件
適用於:SQL Server
本文提供下列區域的相關信息,可協助您在資料庫中實作和使用元件:
- 建立元件
- 修改元件
- 卸除、停用和啟用元件
- 管理元件版本
建立組件
元件是使用 Transact-SQL CREATE ASSEMBLY
語句在 SQL Server 中建立,或使用元件輔助編輯器在 SQL Server Management Studio 中建立。 此外,在 Microsoft Visual Studio 中部署 SQL Server 專案,會在針對專案指定的資料庫中註冊元件。 如需詳細資訊,請參閱 Deploying CLR Database Objects。
- 使用 Transact-SQL: CREATE ASSEMBLY (Transact-SQL)
- 使用 SQL Server Management Studio: 元件 - 屬性
修改元件
元件是使用 Transact-SQL ALTER ASSEMBLY
語句或在 SQL Server Management Studio 中使用元件輔助編輯器修改的。
- 使用 Transact-SQL: ALTER ASSEMBLY (Transact-SQL)
- 使用 SQL Server Management Studio: 元件 - 屬性
當您要執行下列動作時,您可以修改元件:
上傳較新版本的元件二進位檔,以變更元件的實作。 如需詳細資訊,請參閱 本文稍後的管理元件版本 。
變更元件的許可權集。 如需詳細資訊,請參閱 設計元件。
變更元件的可見性。 可見的元件可用於在 SQL Server 中參考。 即使元件是在資料庫中上傳,也無法使用非可見元件。 根據預設,上傳至 SQL Server 實例的元件是可見的。
新增或卸除與元件相關聯的偵錯或來源檔案。
卸除、停用和啟用元件
元件會使用 Transact-SQL DROP ASSEMBLY
語句或 SQL Server Management Studio 來卸除。
- 使用 Transact-SQL: DROP ASSEMBLY (Transact-SQL)
- 使用 SQL Server Management Studio: 刪除物件
根據預設,SQL Server 中建立的所有元件都會停用執行。 您可以使用 clr enabled
系統預存程式的 選項 sp_configure
,停用或啟用在 SQL Server 中上傳的所有元件執行。 停用元件執行可防止 Common Language Runtime (CLR) 函式、預存程式、觸發程式、匯總和使用者定義型別執行,並停止目前正在執行的任何類型。 停用元件執行並不會停用建立、改變或卸除元件的能力。 如需詳細資訊,請參閱 伺服器組態:已啟用 clr。
如需詳細資訊,請參閱 sp_configure。
管理元件版本
將元件上傳至實例 SQL Server 時,元件會儲存和管理於資料庫系統目錄內。 對 Microsoft .NET Framework 中元件定義所做的任何變更,都應該傳播至儲存在資料庫目錄中的元件。
當您必須修改元件時,必須發出 ALTER ASSEMBLY
語句來更新資料庫中的元件。 此語句會將元件更新為保存其實作的最新 .NET Framework 模組複本。
語句 WITH UNCHECKED DATA
的 ALTER ASSEMBLY
子句會指示 SQL Server 重新整理那些資料庫中保存數據相依的元件。 具體來說,您必須指定 WITH UNCHECKED DATA
下列任一項是否存在:
透過 Transact-SQL 函式或方法,直接或間接參考元件中方法的保存計算數據行。
相依於元件之 CLR 使用者定義型別的數據行,而型別會實作
UserDefined
(非Native
) 串行化格式。
警告
如果未 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 會將包含相依於元件之數據的任何數據表標示為未核取的數據。 目錄 has_unchecked_assembly_data
檢視的數據 sys.tables
列包含包含未核取數據的數據表值 1
,以及 0
不含未核取數據的數據表值。
若要解析未核取數據的完整性,請針對具有未核取數據的每個數據表執行 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS
。 如果 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS
失敗,您必須刪除無效的數據表數據列,或修改元件程式代碼以解決問題,然後發出更多 ALTER ASSEMBLY
語句。
ALTER ASSEMBLY
變更元件版本。 組件的文化和公開金鑰 Token 仍然不變。 SQL Server 不允許使用相同名稱、文化特性和公鑰註冊不同版本的元件。
與全計算機原則的互動,以進行版本系結
如果使用發行者原則或全計算機系統管理員原則將儲存在 SQL Server 中的元件參考重新導向至特定版本,您必須執行下列其中一項動作:
請確定這個重新導向的新版本是在資料庫中。
將任何語句修改為計算機或發行者原則的外部原則檔案,以確保它們參考資料庫中的特定版本。
否則,嘗試將新的元件版本載入 SQL Server 實例會失敗。
如需詳細資訊,請參閱 ALTER ASSEMBLY。