次の方法で共有


アセンブリを削除する

適用対象:SQL Server

CREATE ASSEMBLY ステートメントを使用して SQL Server に登録されているアセンブリは、指定した機能が不要になった場合に削除または削除できます。 アセンブリを削除すると、アセンブリと、デバッグ ファイルなどこれに関連するファイルがすべて、データベースから削除されます。 アセンブリを削除するには、次の構文で DROP ASSEMBLY ステートメントを使用します。

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY は、現在実行中のアセンブリを参照しているコードに干渉しませんが、DROP ASSEMBLY 実行すると、アセンブリ コードを呼び出そうとしても失敗します。

DROP ASSEMBLY は、アセンブリがデータベース内に存在する別のアセンブリによって参照されている場合、または現在のデータベースの共通言語ランタイム (CLR) 関数、プロシージャ、トリガー、ユーザー定義型 (UDT)、またはユーザー定義集計 (UDA) によって使用されている場合にエラーを返します。 まず、DROP AGGREGATEDROP FUNCTIONDROP PROCEDUREDROP 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;