ホームページ > データベース > mysql チュートリアル > カーソル、T-SQL、またはストアド プロシージャを使用せずに SQL Server 2000 で MySQL の LIMIT 句をエミュレートするにはどうすればよいですか?

カーソル、T-SQL、またはストアド プロシージャを使用せずに SQL Server 2000 で MySQL の LIMIT 句をエミュレートするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-08 07:25:40
オリジナル
905 人が閲覧しました

How Can I Emulate MySQL's LIMIT Clause in SQL Server 2000 Without Cursors, T-SQL, or Stored Procedures?

古い SQL Server バージョンでの MySQL の LIMIT のレプリケーション

問題: SQL Server 2000 には、MySQL、PostgreSQL、SQLite などのデータベースにある、特定の行範囲を取得するための直接の LIMIT 句がありません。 この記事では、カーソル、T-SQL、ストアド プロシージャを使用しない回避策について説明します。

ソリューション (制限あり):

LIMIT の直接エミュレーションは、追加の構成要素がなければ SQL Server 2000 では不可能です。 ただし、これらのメソッドは特定の状況下で機能します:

方法 1: 一意のキーを利用する

このアプローチは、結果セットに一意の列 (主キーなど) が含まれている場合にのみ機能します。

<code class="language-sql">SELECT TOP n *
FROM tablename
WHERE key NOT IN (
    SELECT TOP x key
    FROM tablename
    ORDER BY key
);</code>
ログイン後にコピー

ここで、x はオフセットを表し、n は取得する行数を表します。 内側のクエリは最初の x 行を除外し、外側のクエリは後続の n 行を選択します。

方法 2: シミュレートされた行番号付け

行番号を生成できる場合 (ただし、これには多少の操作が必要です)、サブクエリと BETWEEN:

を使用できます。
<code class="language-sql">SELECT z2.*
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY id) as rn, *
    FROM mytable
) z2
WHERE z2.rn BETWEEN x + 1 AND x + n;</code>
ログイン後にコピー

(注: ROW_NUMBER() は SQL Server 2000 では使用できません。この例はその概念を示しています。SQL Server 2000 では適切な行番号付けの代替手段を実装する必要があります。) x はオフセットであり、n行数。

方法 3 (SQL Server 2005 以降 – 比較用):

新しい SQL Server バージョン (2005 以降) の場合、EXCEPT ステートメントはよりクリーンなソリューションを提供します。

<code class="language-sql">SELECT * 
FROM (SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3) AS foo
EXCEPT
SELECT * 
FROM (SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3) AS bar;</code>
ログイン後にコピー

これにより、行 51 ~ 75 が取得されます。 この方法は SQL Server 2000 には適用できません。

結論:

SQL Server 2000 で MySQL の LIMIT の正確な機能を実現することは困難です。 提供されているソリューションは回避策を提供しますが、特定のテーブル構造に依存するか、行番号付けの回避策が必要です。 最適なパフォーマンスと機能を実現するには、新しい SQL Server バージョンにアップグレードすることを強くお勧めします。

以上がカーソル、T-SQL、またはストアド プロシージャを使用せずに SQL Server 2000 で MySQL の LIMIT 句をエミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート