實作組件
本主題提供下列部分的資訊,協助您實作和使用資料庫中的組件:
建立組件
修改組件
卸除、停用和啟用組件
管理組件版本
建立組件
組件是使用 Transact-SQL CREATE ASSEMBLY 陳述式在 SQL Server 中建立,或使用 Assembly Assisted Editor 在 SQL Server Management Studio 中建立。 此外,在 Microsoft Visual 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 已啟用伺服器組態選項>。
若要停用和啟用組件執行
管理組件版本
在將組件上傳至 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_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 會變更組件版本。 組件的文化和公開金鑰 Token 仍然不變。 SQL Server 不允許註冊具有相同名稱、文化特性及公開金鑰之不同版本的組件。
與版本繫結的電腦通用原則互動
如果儲存在 SQL Server 中的組件參考,使用簽發者原則或電腦通用管理原則重新導向至特定版本,您必須執行下列其中一個動作:
請確定是在資料庫中執行導向至新版本。
請修改任何對於電腦或簽發者原則的外部原則檔案之陳述式,以確定它們所參考的特定版本是在資料庫中。
否則,嘗試載入新組件版本至 SQL Server 執行個體將會失敗。
更新組件的版本