0

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 は正常に動作し、正しい結果セットが表示されますが、結果セットを一時テーブルに入れるとすぐにエラーが発生します。

ここや他の多くの場所を検索し、次のことを試しました。

  1. sp_configure 'リモート プロシージャ トランス'、0
  2. [リンク サーバーのプロパティ] > [サーバー オプション] で、[分散トランザクションの昇格を有効にする] を false に設定します。このオプションは表示されませんでした。
  3. [リンク サーバーのプロパティ] > [RPC] で、RPC out およびディストリビューターの値が TRUE に設定されています。
  4. Openquery を使用しましたが、動的 SQL を使用したり、パラメーターを渡したりすることはできません。

テーブルには非常に多くの行が含まれています。パラメータに基づいて結果セットを減らすには、DB2 側でクエリを実行する必要があります。

どんな助けでも大いに当てはまります!

4

1 に答える 1

0

MSDTC サービス (DTC) を開始しましたか?

Windows 2008 の場合:

  • [管理ツール] -> [コンポーネント サービス] -> [コンピューター] -> [マイ コンピューター] から: ローカル DTC。[プロパティ] を右クリックし、[MSDTC] タブに移動して [セキュリティの構成] を選択します。
  • 「Network dtc access」と「Allow outbound」のチェックボックスを有効にします。
  • 「認証不要」のチェックボックスを有効にします

それでもうまくいかない場合は、接続プールを無効にしてみてください。

于 2013-02-26T00:14:03.147 に答える