4

私たちの組織では、メインフレームの Adabas データベースに重要なデータが多数あります。このデータへの ODBC アクセスがあり、C# から ODBC/Natural の「ストアド プロシージャ」を使用して正常にクエリ/更新を行いました。

ここで実行できるようにしたいのは、SQL Server 2005 のストアド プロシージャ内からメインフレーム テーブルにクエリを実行し、結果をテーブル変数にダンプしてメッセージを送信し、その結果をネイティブ SQL データと結果セットとして結合することです。

SQL からの Natural プロシージャの実行は、選択しただけの場合は正常に機能します。ただし、結果をテーブル変数に挿入すると、SQL が分散トランザクションを開始しているように見え、それが接続に大混乱をもたらしているようです。

更新を行っていない場合、この DTC エスカレーション動作を無効にすることはできますか?

DTC を適切にセットアップして DataDirect の (以前の Neon Systems) Shadow ODBC ドライバーと通信するためのヒントはありますか?

4

4 に答える 4

3

SET REMOTE_PROC_TRANSACTIONS OFF無効にする必要があるものを確認してください。またはsp_serveroption、バッチごとではなく、一般的にリンクサーバーを構成します。

MS SQL 側で記述しているため、トランザクションを開始します。デフォルトでは、必要かどうかにかかわらずエスカレートします。テーブル変数はトランザクションに参加していませんが。

ストアド プロシージャなどで、MS SQL が書き込むかどうかに基づいて MS SQL 側の動作が異なるという同様の問題が以前に発生しました。私が見つけた最も信頼できる方法は、Sybase リンク サーバーへの動的 SQL 呼び出しを使用することでした...

于 2008-12-14T13:11:24.303 に答える
3

次のコードは、リンク サーバーの「分散トランザクションの昇格を有効にする」を設定します。

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'REMOTE_SERVER', @optname=N'remote proc transaction promotion', @optvalue=N'false'
GO

これにより、リンク サーバー ストアド プロシージャ呼び出しの結果をテーブル変数に挿入できます。

于 2010-04-24T20:21:24.513 に答える
0

DTCについてはよくわかりませんが、データの移動にはDTSX(統合サービス)が役立つ場合があります。ただし、単にデータをクエリできる場合は、直接アクセスするためのリンクサーバーの追加を検討することをお勧めします。次に、リンクサーバーのテーブルからの選択に基づいてテーブルにデータを入力する簡単なクエリを作成できます。

于 2008-09-22T18:25:28.447 に答える
0

それは本当だ。ご想像のとおり、私たちが呼び出したいNaturalプロシージャは、可能であればそのレベルで維持したいルックアップと計算を実行します。

于 2008-09-22T20:02:44.733 に答える