共用方式為


卸除元件

適用於:SQL Server

當不再需要它們所提供的功能時,可以使用 CREATE ASSEMBLY 語句在 SQL Server 中註冊的元件刪除或卸除。 卸除元件會從資料庫移除元件及其所有相關聯的檔案,例如偵錯檔案。 若要卸除元件,請使用具有下列語法的 DROP ASSEMBLY 語句:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY 不會干擾目前執行中元件的任何程序代碼,但在執行 DROP ASSEMBLY 之後,任何叫用元件程式代碼的嘗試都會失敗。

如果元件是由存在於資料庫中的另一個元件所參考,或是 Common Language Runtime (CLR) 函式、程式、觸發程式、使用者定義型別 (UDT) 或目前資料庫中的使用者定義匯總 (UDA) 使用,則 DROP ASSEMBLY 會傳回錯誤。 首先,使用 DROP AGGREGATEDROP FUNCTIONDROP PROCEDUREDROP TRIGGERDROP 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;