次の方法で共有


アセンブリの実装

このトピックでは、データベース内のアセンブリの実装と操作に役立つ次の領域について説明します。

  • アセンブリの作成

  • アセンブリの変更

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

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

アセンブリの作成

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

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

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

アセンブリの変更

アセンブリは、Transact-SQL ALTER ASSEMBLY ステートメントを使用して SQL Server で変更するか、アセンブリ 支援エディターを使用して 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 対応オプションを使用して、SQL Server にアップロードされたすべてのアセンブリの実行を無効または有効にすることができます。 アセンブリの実行を無効にすると、共通言語ランタイム (CLR) 関数、ストアド プロシージャ、トリガー、集計、およびユーザー定義型が実行されなくなり、現在実行中の型が停止されます。 アセンブリの実行を無効にしても、アセンブリを作成、変更、または削除する機能は無効になりません。 詳細については、「 clr 対応サーバー構成オプション」を参照してください。

アセンブリの実行を無効にして有効にするには

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

アセンブリが SQL Server インスタンスにアップロードされると、アセンブリはデータベース システム カタログ内に格納および管理されます。 Microsoft .NET Framework でアセンブリの定義に加えられた変更は、データベース カタログに格納されているアセンブリに反映する必要があります。

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

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

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

  • アセンブリに依存する CLR ユーザー定義型の列と、その型は UserDefined (非ネイティブ) シリアル化形式を実装します。

注意事項

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 のインスタンスに新しいアセンブリ バージョンを読み込もうとすると失敗します。

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

こちらもご覧ください

アセンブリ (データベース エンジン)
アセンブリに関する情報の取得