アセンブリの実装

このトピックでは、データベースにアセンブリを実装し、それらのアセンブリを使用して作業するのに役立つ次の情報について説明します。

  • アセンブリの作成

  • アセンブリの変更

  • アセンブリの削除、無効化、および有効化

  • アセンブリのバージョン管理

アセンブリの作成

アセンブリの作成は、SQL Server では Transact-SQL CREATE ASSEMBLY ステートメントを使用し、SQL Server Management Studio ではアセンブリ支援エディターを使用して行います。 また、Microsoft Visual Studio で SQL Server プロジェクトを配置すると、そのプロジェクトで指定されたデータベース内のアセンブリが登録されます。 詳細については、「CLR データベース オブジェクトの配置」を参照してください。

Transact-SQL を使用してアセンブリを作成するには

SQL Server Management Studio を使用してアセンブリを作成するには

アセンブリの変更

アセンブリの変更は、SQL Server では Transact-SQL ALTER ASSEMBLY ステートメントを使用し、SQL Server Management Studio ではアセンブリ支援エディターを使用して行います。 次の操作を行うと、アセンブリを変更できます。

  • アセンブリの新しいバージョンのバイナリをアップロードして、アセンブリの実装を変更します。 詳細については、このトピックの「アセンブリのバージョン管理」を参照してください。

  • アセンブリの権限セットを変更します。 詳細については、「アセンブリのデザイン」を参照してください。

  • アセンブリの表示設定を変更します。 表示されるアセンブリは SQL Server で参照できます。 表示されないアセンブリは、データベースにアップロードされている場合でも参照できません。 既定では、SQL Server のインスタンスにアップロードされたアセンブリは表示されます。

  • アセンブリに関連付けられているデバッグ ファイルやソース ファイルを追加または削除します。

Transact-SQL を使用してアセンブリを変更するには

SQL Server Management Studio を使用してアセンブリを変更するには

アセンブリの削除、無効化、および有効化

アセンブリの削除は、Transact-SQL DROP ASSEMBLY ステートメントまたは SQL Server Management Studio を使用して行います。

Transact-SQL を使用してアセンブリを削除するには

SQL Server Management Studio を使用してアセンブリを削除するには

既定では、SQL Server で作成されたアセンブリがすべて実行できない状態になっています。 sp_configure システム ストアド プロシージャの clr enabled オプションを使用して、SQL Server にアップロードされているすべてのアセンブリの実行を無効または有効にすることができます。 アセンブリの実行を無効にすると、CLR (共通言語ランタイム) 関数、ストアド プロシージャ、トリガー、集計、およびユーザー定義型を実行できなくなり、現在実行されている場合は停止されます。 アセンブリの実行を無効にしても、アセンブリを作成、変更、または削除する機能は無効になりません。 詳細については、「clr enabled サーバー構成オプション」を参照してください。

アセンブリの実行を無効および有効にするには

アセンブリのバージョン管理

アセンブリを SQL Server のインスタンスにアップロードすると、そのアセンブリはデータベース システム カタログ内に格納され、管理されます。 Microsoft .NET Framework でアセンブリの定義に対して行ったすべての変更は、データベース カタログに格納されているアセンブリに反映されます。

アセンブリを変更する必要がある場合は、ALTER ASSEMBLY ステートメントを実行してデータベース内のアセンブリを更新する必要があります。 これにより、アセンブリの実装を保持している .NET Framework モジュールの最新のコピーにアセンブリが更新されます。

ALTER ASSEMBLY ステートメントの WITH UNCHECKED DATA 句は、データベース内の永続化されたデータが依存しているアセンブリも最新状態に更新するように SQL Server に指示します。 具体的には、次のいずれかが存在する場合、WITH UNCHECKED DATA を指定する必要があります。

  • Transact-SQL の関数またはメソッドによってアセンブリ内のメソッドを直接または間接的に参照する、永続化された計算列。

  • アセンブリに依存し、UserDefined (Native 以外) のシリアル化形式を実装する CLR ユーザー定義型の列。

注記注意

新しいバージョンのアセンブリがテーブルやインデックスなど永続的な場所に格納されている既存データに影響する場合、WITH UNCHECKED DATA を指定しないと、SQL Server によって ALTER ASSEMBLY の実行が防止されます。 ただし、SQL Server では、CLR アセンブリの更新時に、計算列、インデックス、インデックス付きビュー、または式が、基になるルーチンや型と一致することは保証されません。 ALTER ASSEMBLY を実行する場合は、式の結果とアセンブリ内の式に基づく値との間に不一致が生じないように注意する必要があります。

WITH UNCHECKED DATA 句を使用して ALTER ASSEMBLY を実行できるのは、db_owner および db_ddlowner 固定データベース ロールのメンバーのみです。

SQL Server は、テーブル内に未チェック データがある状態でアセンブリが変更されたというメッセージを Windows アプリケーション イベント ログに記録します。 さらに SQL Server は、そのアセンブリに依存するデータを含んでいるすべてのテーブルに、未チェック データを含むテーブルであるというマークを付けます。 sys.tables カタログ ビューの has_unchecked_assembly_data 列では、未チェック データを含むテーブルに対して 1 が設定され、未チェック データを含まないテーブルに対して 0 が設定されます。

未チェック データの整合性を解決するには、未チェック データを含む各テーブルに対して DBCC CHECKTABLE を実行します。 DBCC CHECKTABLE が失敗した場合、無効なテーブル行を削除するか、問題を解決できるようにアセンブリ コードを変更して、新たな ALTER ASSEMBLY ステートメントを実行する必要があります。

ALTER ASSEMBLY を実行すると、アセンブリのバージョンが変更されます。 アセンブリのカルチャと公開キー トークンは変更されません。 SQL Server では、異なるバージョンのアセンブリを登録するときに、同じ名前、カルチャ、および公開キーを指定できません。

バージョン バインディングでのコンピューター全体のポリシーとの相互作用

パブリッシャー ポリシーまたはコンピューター全体の管理者ポリシーを使用して、SQL Server に格納されているアセンブリへの参照を特定のバージョンにリダイレクトする場合、次のいずれかを実行する必要があります。

  • リダイレクト先の新しいバージョンがデータベースに格納されていることを確認します。

  • すべてのステートメントをコンピューターの外部ポリシー ファイルまたはパブリッシャー ポリシーに変更して、データベースに格納されている特定のバージョンがステートメントによって参照されるようにします。

上記のいずれかの操作を実行しないと、SQL Server のインスタンスに新しいアセンブリのバージョンをロードできません。

アセンブリのバージョンを更新するには

関連項目

概念

アセンブリについての情報の取得

その他の技術情報

アセンブリ (データベース エンジン)