首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 2005 中使用 ROW_NUMBER() 而不使用 ORDER BY?

如何在 SQL Server 2005 中使用 ROW_NUMBER() 而不使用 ORDER BY?

Susan Sarandon
發布: 2024-12-24 14:52:15
原創
663 人瀏覽過

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

SQL Server 2005 不帶ORDER BY 的ROW_NUMBER()

在SQL Server 2005 中,可用於產生結果集中每行的唯一序號。但是,與較高版本中的對應項不同,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) 提示用於通過確保獨占表來防止並發問題

注意事項:

  • 此解決方法不能保證保留資料的原始順序。其他因素,例如鎖定和並發進程,可能會影響結果順序。
  • 它不如使用識別列進行自動增量高效。
  • 使用識別列是首選並發和效能原因的解決方案。

以上是如何在 SQL Server 2005 中使用 ROW_NUMBER() 而不使用 ORDER BY?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板