0

リンクサーバーを使用してOracleからデータをインポートするスケジュールされたAMプロセスがSQLServer2008にあります。ドロップテーブルを使用してOracleからインポートしたデータを上書きしてから、パターンに選択します

どうやら、「order by」の存在は私の最終結果に影響を与えます!見てください。

--This works fine to give me the one row I'm expecting from the newly imported table:
drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS
order by EXTERNAL_ORGANIZATION_ID asc ');
go

select * from t1 
where external_organization_id = '1000107'
go

しかし、これ(以下)は行を返しません。1000107のorgIdが見つかりませんか?

drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS ');
go

select * from t1 
where external_organization_id = '1000107'
go

ご覧のとおり、変更されたのはorderby句の存在だけです。もう1つのヒントは、「順序付け」が存在するかどうかに関係なく、リンクサーバークエリが同じ行数(正確には51,225行)を返すことです。何か案は?

4

4 に答える 4

0

Oracleでインデックスを再計算する必要があるかもしれませんか?

于 2009-09-21T16:50:56.353 に答える
0

SET ROWCOUNT のようなオプションは有効ですか? 特に、リンクされた Oracle データベースでは。私が Oracle で何かをしてから何年も経っているので、詳細は覚えていません。

于 2009-09-21T17:16:43.930 に答える
0

51,225 行で何らかの上限に達しているようです。私はオラクル側を管理しておらず、私の組織の別の部門が管理しています。彼らの 1 人は、正確なクエリは 51,324 行を返すはずだと言っています。

つまり、実際に起こっていることは、完全な結果セットよりも 99 行少ないということです。私の「order by」句は結果の優先順位を再設定し、たまたま探していた1行を提供してくれました。残念ながら、もちろん、それはまだ 99 の他の結果を出しています!

51,225 という数字の何が重要なのかわかりません。リンクサーバーのSQLサーバー構成が何らかの形で設定されているとは想像しがたいです(設定時にデフォルトを使用しました)。

最悪の場合、インポートを 2 つのクエリに分割し、順序を逆にして、すべてのベースをカバーします。私は本当にその神秘的な 51,225 の「キャップ」の底に到達する必要があります...

すべての入力に感謝します!

于 2009-09-22T00:44:53.920 に答える
0

プロバイダーに基づくリンク サーバー: 「OLE DB 用 Oracle プロバイダー」(ローカル システム ODBC 接続「ODBC ドライバー用 Microsoft OLE DB プロバイダー」に基づくのではなく) は、最初の試行で完全な結果セットを返しました。

何らかの理由で、返される行の最大数に関して、ODBC 接続の上限が低くなければなりません。私が見つけた唯一の設定は「フェッチバッファサイズ」でした.2倍にしようとしましたが、同じ量の行が返されました.

このクエリでは、他のリンク サーバーを使用します。

ご意見をお寄せいただきありがとうございます。

于 2009-09-22T14:06:40.793 に答える