卸除組件
如果您不再需要已經使用 CREATE ASSEMBLY 陳述式在 SQL Server 中註冊之組件所提供的功能,就可以刪除或卸除這些組件。 卸除組件會從資料庫中移除組件及其所有相關聯的檔案 (例如偵錯檔案)。 若要卸除組件,請使用 DROP ASSEMBLY 陳述式搭配下列語法:
DROP ASSEMBLY MyDotNETAssembly
雖然 DROP ASSEMBLY 不會干擾參考目前執行中組件的任何程式碼,但是在 DROP ASSEMBLY 執行之後,任何嘗試叫用此組件的行為都會失敗。
如果組件是由資料庫中的另一個組件所參考,或者如果它是由目前資料庫中的 Common Language Runtime (CLR) 函數、程序、觸發程序、使用者定義型別 (UDT) 或使用者定義彙總 (UDA) 所使用,DROP ASSEMBLY 就會傳回錯誤。 請先使用 DROP AGGREGATE、DROP FUNCTION、DROP PROCEDURE、DROP TRIGGER 和 DROP TYPE 陳述式來刪除此組件所包含的任何 Managed 資料庫物件。
從資料庫中移除 UDT
DROP TYPE 陳述式會從目前的資料庫中移除 UDT。 一旦卸除 UDT 之後,您就可以使用 DROP ASSEMBLY 陳述式,從資料庫中卸除組件。
如果物件相依於 UDT,DROP TYPE 陳述式就會失敗,如下列情況所示:
資料庫中包含使用 UDT 定義之資料行的資料表。
使用 WITH SCHEMABINDING 子句在資料庫中建立的函數、預存程序或觸發程序 (使用 UDT 變數或參數)。
尋找 UDT 相依性
您必須先卸除所有相依物件,然後再執行 DROP TYPE 陳述式。 下列 Transact-SQL 查詢會在 AdventureWorks 資料庫中找出使用 UDT 的所有資料行和參數。
USE Adventureworks;
SELECT o.name AS major_name, o.type_desc AS major_type_desc
, c.name AS minor_name, c.type_desc AS minor_type_desc
, at.assembly_class
FROM (
SELECT object_id, name, user_type_id, 'SQL_COLUMN' AS type_desc
FROM sys.columns
UNION ALL
SELECT object_id, name, user_type_id, 'SQL_PROCEDURE_PARAMETER'
FROM sys.parameters
) AS c
JOIN sys.objects AS o
ON o.object_id = c.object_id
JOIN sys.assembly_types AS at
ON at.user_type_id = c.user_type_id;