首頁 >資料庫 >mysql教程 >如何在 SQL Server 2005 中使用 ROW_NUMBER() 自動遞增非識別列?

如何在 SQL Server 2005 中使用 ROW_NUMBER() 自動遞增非識別列?

Patricia Arquette
Patricia Arquette原創
2024-12-27 01:10:10909瀏覽

How Can I Auto-Increment a Non-Identity Column in SQL Server 2005 Using ROW_NUMBER()?

在SQL Server 2005 中使用ROW_NUMBER() 而不使用ORDER BY 進行自動遞增

在 Server 2005 中,自動遞增當使用ROW_NUMBER()且缺少標識列時,標識列可能會具有挑戰性合適的 ORDER BY 標準。但是,還有其他選擇:

將 ROW_NUMBER() 與常數 Order By 子句結合使用:

雖然缺少有效的 ORDER BY 字段,但 ROW_NUMBER()可以與模擬自動遞增的常數排序子句:

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

This方法避免明確排序,同時確保 ID 列中的唯一性。

警告:不保證原始排序:

要注意的是,這種方法不能保證保存原始的SourceTable順序。其他因素,例如外部查詢的 ORDER BY,可能會影響結果排序。

並發注意事項:

鎖定提示(TABLOCKX 和 HOLDLOCK)包含在查詢以防止並發程序在查詢執行步驟之間插入相同的 ID。但是,這種方法不如使用識別列有效,只能被視為一種解決方法。

推薦解決方案:使用識別列:

為了獲得最佳效能和併發性方面,強烈建議使用identity列進行自增。

以上是如何在 SQL Server 2005 中使用 ROW_NUMBER() 自動遞增非識別列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn