0

どうすれば、Sybase のデータベース エンジンがレコードのソートされていないリストを数値順以外で返すようにできますか?

~~~

ID が順番に生成されるテーブルから選択するアプリケーションでエラーを再現する必要があるという問題がありますが、ID は選択の最後の ID ではありません。

説明させてください。

ID    STATUS
_____________
1234   C
1235   C
1236   O

上記は3つのIDです。これらがの結果になるコードがありました

select @p_id = ID from table where (conditions).

ただし、status = 'O' (オープン) をチェックする句はありませんでした。Sybase は最後に返されたレコードを変数に保存することを思い出してください。

~~~~~

テストチームに、結果が機能しないものを提供するよう求められています。Sybase が順序付けされていないリストで上記を選択すると、昇順で表示される可能性があります。または、データベース エンジンが格納されたデータのブロックまたは何か技術的なマジックを変更する必要がある場合、順序がめちゃくちゃになる可能性があります。元のエラーは、プロシージャーが 1236 ではなく 1234 を返す場合でした。

Sybase がデータのブロックを検索し、効果的に昇順検索を「中断」して、最後のレコードではなく他のレコードを返すように100% 保証できる方法はありますか? (最大値を除くすべてのレコードは、すべて「クローズ」されているため、エラーになります)

テーブルを正確な数値順に検索しないようにする魔法の SQL コードが必要です。理想的には、テスト チームはまったく同じ手順が壊れていることを確認したいので、手順を変更する必要はありません (order by id desc結果をごまかすのと同じくらい簡単です)。

4

1 に答える 1

2

順序を指定しない場合、結果の戻り順序を保証する方法はありません。ただし、インデックスは作成されます。挿入の順序、インデックスのタイプ、およびインデックスキーの内容によって異なります。

これらの種類のシングルトンを実行することは一般的に悪い考えSELECTです。常に句で特定のレコードを指定するWHEREか、カーソルまたはTOPnなどを使用する必要があります。問題は、誰かがコードを理解しようとしたときに発生します。複数のヒットを検出したデータベースの中には、最初の値を取得するもの、最後の値を取得するもの、ランダムな値を取得するもの(「実装定義」と呼ばれるもの)、およびエラー。

これはたまたま1156837に関連していますか?:)

于 2009-08-12T01:29:35.997 に答える