アセンブリを削除する
適用対象:SQL Server
CREATE ASSEMBLY
ステートメントを使用して SQL Server に登録されているアセンブリは、指定した機能が不要になった場合に削除または削除できます。 アセンブリを削除すると、アセンブリと、デバッグ ファイルなどこれに関連するファイルがすべて、データベースから削除されます。 アセンブリを削除するには、次の構文で DROP ASSEMBLY
ステートメントを使用します。
DROP ASSEMBLY MyDotNETAssembly;
DROP ASSEMBLY
は、現在実行中のアセンブリを参照しているコードに干渉しませんが、DROP ASSEMBLY
実行すると、アセンブリ コードを呼び出そうとしても失敗します。
DROP ASSEMBLY
は、アセンブリがデータベース内に存在する別のアセンブリによって参照されている場合、または現在のデータベースの共通言語ランタイム (CLR) 関数、プロシージャ、トリガー、ユーザー定義型 (UDT)、またはユーザー定義集計 (UDA) によって使用されている場合にエラーを返します。 まず、DROP AGGREGATE
、DROP FUNCTION
、DROP PROCEDURE
、DROP TRIGGER
、および DROP TYPE
ステートメントを使用して、アセンブリに含まれるマネージド データベース オブジェクトを削除します。
データベースから 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;