卸除元件
適用於:SQL Server
當不再需要它們所提供的功能時,可以使用 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 查詢會找出在 AdventureWorks2022
資料庫中使用 UDT 的所有數據行和參數。
USE Adventureworks2022;
GO
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
INNER JOIN sys.objects AS o
ON o.object_id = c.object_id
INNER JOIN sys.assembly_types AS at
ON at.user_type_id = c.user_type_id;