SQL Server 2005 上の DB2 に対してリンクされたサーバーがあります。リンクされたサーバーからの単純なクエリ結果セットを一時テーブルに入れようとすると、このエラーが返されます。
リンク サーバー "SOMEDSN" の OLE DB プロバイダー "MSDASQL" がメッセージ "[IBM][CLI Driver] SQL0998N トランザクションまたはヒューリスティック処理中にエラーが発生しました。理由コード = "16"。サブコード = "2-8004D026"。SQLSTATE=58005"" を返しました。 . メッセージ 7391、レベル 16、状態 2、行 21 リンク サーバー "SOMEDSN" の OLE DB プロバイダー "MSDASQL" が分散トランザクションを開始できなかったため、操作を実行できませんでした。
DECLARE @FilterCode varchar(20);
Set @FilterCode = '11122';
Create Table #TmpTable (
Id Int
)
Insert Into #TmpTable
EXEC ('Select A.Id From SCM1.DB2TBL1 A Where A.FilterCode = ?', @FilterCode) At SOMEDSN;
Exec は正常に動作し、正しい結果セットが表示されますが、結果セットを一時テーブルに入れるとすぐにエラーが発生します。
ここや他の多くの場所を検索し、次のことを試しました。
- sp_configure 'リモート プロシージャ トランス'、0
- [リンク サーバーのプロパティ] > [サーバー オプション] で、[分散トランザクションの昇格を有効にする] を false に設定します。このオプションは表示されませんでした。
- [リンク サーバーのプロパティ] > [RPC] で、RPC out およびディストリビューターの値が TRUE に設定されています。
- Openquery を使用しましたが、動的 SQL を使用したり、パラメーターを渡したりすることはできません。
テーブルには非常に多くの行が含まれています。パラメータに基づいて結果セットを減らすには、DB2 側でクエリを実行する必要があります。
どんな助けでも大いに当てはまります!