Bagikan melalui


Menjatuhkan rakitan

Berlaku untuk:SQL Server

Rakitan yang terdaftar di SQL Server menggunakan pernyataan CREATE ASSEMBLY dapat dihapus, atau dihilangkan, ketika fungsionalitas yang mereka berikan tidak lagi diperlukan. Menghapus rakitan akan menghapus rakitan dan semua file terkaitnya, seperti file debug, dari database. Untuk menghilangkan rakitan, gunakan pernyataan DROP ASSEMBLY dengan sintaks berikut:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY tidak mengganggu kode apa pun yang merujuk perakitan yang saat ini berjalan, tetapi setelah DROP ASSEMBLY dijalankan, setiap upaya untuk memanggil kode rakitan gagal.

DROP ASSEMBLY mengembalikan kesalahan jika rakitan direferensikan oleh rakitan lain yang ada dalam database, atau jika digunakan oleh fungsi, prosedur, pemicu, jenis yang ditentukan pengguna (UDT) common language runtime (CLR), atau agregat yang ditentukan pengguna (UDAs) dalam database saat ini. Pertama gunakan pernyataan DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGER, dan DROP TYPE untuk menghapus objek database terkelola yang terkandung dalam rakitan.

Menghapus UDT dari database

Pernyataan DROP TYPE menghapus UDT dari database saat ini. Setelah UDT dihilangkan, Anda dapat menggunakan pernyataan DROP ASSEMBLY untuk menghilangkan rakitan dari database.

Pernyataan DROP TYPE gagal jika objek bergantung pada UDT, seperti dalam situasi berikut:

  • Tabel dalam database yang berisi kolom yang ditentukan menggunakan UDT.

  • Fungsi, prosedur tersimpan, atau pemicu yang menggunakan variabel atau parameter UDT, yang dibuat dalam database dengan klausa WITH SCHEMABINDING.

Menemukan dependensi UDT

Anda harus terlebih dahulu menghilangkan semua objek dependen, lalu menjalankan pernyataan DROP TYPE. Kueri Transact-SQL berikut menemukan semua kolom dan parameter yang menggunakan UDT di database AdventureWorks2025.

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;