アセンブリの実装

適用対象: SQL Server

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

  • アセンブリの作成
  • アセンブリの変更
  • アセンブリの削除、無効化、有効化
  • アセンブリ バージョンの管理

アセンブリを作成する

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

アセンブリを変更する

アセンブリは、Transact-SQL ALTER ASSEMBLY ステートメントを使用して SQL Server で変更するか、アセンブリ 支援エディターを使用して SQL Server Management Studio で変更されます。

次のアクションを実行する場合は、アセンブリを変更できます。

  • アセンブリの新しいバージョンのバイナリをアップロードして、アセンブリの実装を変更します。 詳細については、この記事の後半の「 Manage アセンブリのバージョン を参照してください。

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

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

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

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

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

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

詳細については、sp_configure に関する記事を参照してください。

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

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

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

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

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

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

注意事項

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

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

SQL Server は、テーブル内のチェックされていないデータでアセンブリが変更されたことを示すメッセージを Windows アプリケーション イベント ログに投稿します。 その後、SQL Server は、アセンブリに依存するデータを含むテーブルを、オフのデータとしてマークします。 sys.tables カタログ ビューのhas_unchecked_assembly_data列には、未チェックのデータを含むテーブルの値1と、オフになっているデータのないテーブルの0が含まれます。

チェックされていないデータの整合性を解決するには、データがオフになっている各テーブルに対して DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS を実行します。 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS失敗した場合は、無効なテーブル行を削除するか、アセンブリ コードを変更して問題に対処してから、さらにALTER ASSEMBLYステートメントを発行する必要があります。

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

バージョン バインドに関するコンピューター全体のポリシーとの対話

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

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

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

それ以外の場合、SQL Server のインスタンスに新しいアセンブリ バージョンを読み込もうとすると失敗します。

詳細については、「 ALTER ASSEMBLY」を参照してください。