現在オフラインです。再接続するためにインターネットの接続を待っています

以前にインストールした SQL Server から、SQL Server 2008 の共通言語ランタイム機能を使用するアプリケーション、スクリプト、または機能を実行するとエラー メッセージ ".NET Framework エラーが発生しました" が表示される

現象
Microsoft SQL Server 2008 へのアップグレード後、以前にインストールした Microsoft SQL Server から、共通言語ランタイム (CLR) 機能を使用するアプリケーション、スクリプト、または機能を実行すると、次のようなエラー メッセージが表示されます。
メッセージ 6522、レベル 16、状態 1、行 1

ユーザー定義のルーチンまたは集計 "routine name" を実行中に .NET Framework エラーが発生しました:

System.InvalidOperationException: このコンテキストではデータ アクセスは許可されません。このコンテキストは、DataAccessKind.Read または SystemDataAccessKind.Read に設定されていない関数またはメソッドか、テーブル値関数の FillRow メソッドからデータを取得するためのコールバックか、または UDT 検証メソッドのいずれかです。

System.InvalidOperationException
たとえば、この問題は以下の状況で発生する可能性があります。

状況 1

以下の特徴を持つメソッドを使用します。
  • メソッドで、偽装を実行する CLR ユーザー定義関数、ユーザー定義型 (UDT) メソッド、またはユーザー定義の集計を使用している。
  • メソッドで、パラメータとしてラージ オブジェクト (LOB) を使用している。
  • メソッド自体で、DataAccesKind.Read プロパティを使用していない。

状況 2

偽装を実行する CLR テーブル値関数で INIT メソッドを使用している。

状況 3

偽装を実行する CLR テーブル値関数で FillRow メソッドを使用している。
原因
この問題は、SQL Server 2008 のデータベース エンジン機能の変更が原因で発生します。
回避策
「現象」の各状況に記載されている問題を回避するには、次のいずれかの方法を実行します。

方法 1 : 状況 1 および状況 2 でこの問題を回避する

この問題を回避するには、DataAccessKind.Read プロパティをメソッドに追加します。

方法 2 : 状況 3 でこの問題を回避する

この問題を回避するには、次の手順を実行します。
  • FillRow メソッドから偽装を削除します。
  • FillRow メソッドを使用して外部リソースにアクセスしないようにします。
  • 外部リソースへのアクセスには、テーブル値関数の INIT メソッドのみを使用するようにします。
関連情報
DataAccessKind.Read プロパティおよび CLR ルーチンの他のカスタム属性については、次の Microsoft TechNet Web サイトを参照してください。SQL Server 2008 におけるデータベース エンジン機能の重大な変更については、次の Microsoft TechNet Web サイトを参照してください。
"SQL Server 2008 Database Engine" sqlserver2008 sqlserver2k8 sqlsvr2008 sqlsvr2k8 SQL2008RelNoteDatabaseEngine
プロパティ

文書番号:955629 - 最終更新日: 10/08/2008 07:37:53 - リビジョン: 1.2

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Express with Advanced Services, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup

  • kbprogramming kbautomation kberrmsg kbtshoot kbexpertiseinter kbprb KB955629
フィードバック
eElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">