ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で ORDER BY を使用せずに ROW_NUMBER() を使用するにはどうすればよいですか?

SQL Server 2005 で ORDER BY を使用せずに ROW_NUMBER() を使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-24 14:52:15663ブラウズ

How Can I Use ROW_NUMBER() Without ORDER BY in SQL Server 2005?

SQL Server 2005 での ORDER BY を使用しない ROW_NUMBER()

SQL Server 2005 では、ROW_NUMBER() 関数を使用して結果セット内の各行の一意の連続番号。ただし、それ以降のバージョンの対応するものとは異なり、SQL Server 2005 の ROW_NUMBER() には明示的な ORDER BY 句が必要です。この制限は、データの元の順序を変更せずに連続番号を生成しようとする場合に問題を引き起こします。

解決策:

この制限を回避するには、次の指定を避けることができます。次のクエリを使用した明示的な順序付け構文:

INSERT INTO TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM SourceTable
WHERE {somecondition};

説明:

  • 最も外側の ORDER BY (SELECT 1) はプレースホルダーとして機能し、明示的な順序付けを効果的に回避します。
  • WITH (TABLOCKX, HOLDLOCK) ヒントは、同時実行性の問題を防ぐために使用されます。排他的テーブル ロック。

考慮事項:

  • この回避策は、データの元の順序が保持されることを保証するものではありません。ロックや同時プロセスなどの他の要因が、結果の順序に影響を与える可能性があります。
  • 自動インクリメントに ID 列を使用するほど効率的ではありません。
  • ID 列を使用することをお勧めします。同時実行性とパフォーマンス上の理由からのソリューション。

以上がSQL Server 2005 で ORDER BY を使用せずに ROW_NUMBER() を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。