2012-01-22 1 views
-2

いくつかのDB、MYSQL、ORACLE、MS SQLおよび
と通信できるORMレイヤーを持っています 私のアプリケーションでは、私が知りませんでした結果は
というようにクエリから直接取得できるので、ORMレイヤーを3つのDBに合わせて更新しています
私は言いました。 ORACLE SELECT * FROM (SELECT * FROM myTable as t WHERE rownum < 100) WEHRE rownum > 10



MS SQL制限ステートメントなしで注文なし

MYSQL SELECT * FROM myTable limit 5,5


しかし、MS SQLに私は、クエリ内のすべての構文エラーをお詫び申し上げますクエリ

ORDER BYの取得する方法を見つけるカント、彼らはメモリから。

私の質問は、あなたがここで何をしているか再考してくださいMS SQL

+0

Possible duplicates http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server –

+0

ありがとう、私が探していたのは – user963602

答えて

4

のためのページング機能をORDER BYを取り除くと取得する方法があり、あります。
使用しているデータベースエンジンが何であっても、ページングを使用するときは、ORDER BYを取り除こうとするのは絶対に意味がありません。

リレーショナルデータベースの行には一定の順序がありません。特定の順序で行を受信する場合は、ORDER BY句を指定する必要があります。
ORDER BY句を指定しないと、データベースエンジンはランダムな順序で行を返します。多くの場合、順序は分かりやすく(プライマリキーによって順序付けられているように)、同じクエリを複数回実行すると、順序は本当に同じになることがあります。

実際には、これはすべてランダムであり、この「疑似オーダー」に頼ることはできません。各疑問や感想は同じです。
自分でオーダーを指定せずにページングすることは絶対に意味がありません。

+0

+1です。これは、初心者のためのSQLです。注文を使用する - それは1つ持っていない意味がありません。 SQLについての本を入手し、1ページ目から読んでください。データベースの基礎を理解していない限り、ORMで作業しないでください。私が最初のORMを何年も前に作ったとき、私はスキーマに「自然順序」を導入しました。これは、orerが質問されなかったときに適用されたデフォルトの順序です。 – TomTom

+0

dud、初心者ではない、私はMS SQLの使い方が分からない、いくつかのインデックスを持っていて、エンジンはインデックスに応じて独自の結果セットを注文するので、どうやってクエリで順序を取り除く? – user963602

+3

注文が信頼できるものであることを確認したい場合は、「注文」を取り除くことはできません。私たちを信じて。 –

2

SELECT 
    * 
FROM 
    (SELECT *,ROW_NUMBER() OVER (ORDER BY <some_col>) as rownum FROM myTable) t 
WHERE rownum >= UpperLimit AND rownum <= LowerLimit 

あなたのデータをページングする順序を定義するテーブル内のいくつかの列に<some_col>を交換してみてください。

+0

私の質問は「注文しないで」 – user963602

+2

でした。それからあなたは質問が非常によく、よく知られていません。 SQL Server 2008 R2以降では、並べ替えを行うことなく行うことはできません。 SQL Server 2012は制限節をサポートしていますが、多分あなたは待っています... – Mithrandir

1

問題の内容がわかりません。あなたは書くことができます:

select TOP 10 * from T 

これはうまくいきます。

これは通常、特定の順序が保証されていないため意味がありません。それは照会から照会に変わることさえあります。

しかし、あなたが気にすべてが特定のテーブルから任意の 10個のレコードを取得することであるならば、それは感覚を作ることができます。

関連する問題