首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 TOP 子句增強:支援 UPDATE/DELETE、參數化、搭配 CTE 自訂排序

     編輯:關於SqlServer

SQL Server 2005 擴充 `TOP` 支援 `UPDATE`/`DELETE` 並可參數化,但不支援直接 `ORDER BY`。若需依特定順序刪除/更新前 N 筆,可搭配 CTE(Common Table Expression)達成。

基本語法


-- 參數化
DECLARE @n INT = 2;
UPDATE TOP (@n) tb SET tag = 1;
DELETE TOP (@n) FROM tb;

測試場景:建立測試表


CREATE TABLE tb (id INT IDENTITY(1,1), name VARCHAR(10), tag INT DEFAULT 0);
INSERT INTO tb (name) VALUES ('a'),('b'),('c'),('d'),('e');

1. UPDATE TOP (2) — 依預設順序(PK 順序)更新前兩列


UPDATE TOP (2) tb SET tag = 1;
-- 結果:id 1,2 的 tag=1

2. 依自訂順序更新(如 id 遞減)— 搭配 CTE


;WITH t AS (SELECT TOP (2) * FROM tb ORDER BY id DESC)
UPDATE t SET tag = 1;
-- 結果:id 5,4 的 tag=1

3. DELETE TOP (2) — 依預設順序刪除前兩列


DELETE TOP (2) FROM tb;
-- 結果:剩 id 3,4,5

4. 依自訂順序刪除 — 搭配 CTE


;WITH t AS (SELECT TOP (2) * FROM tb ORDER BY id DESC)
DELETE FROM t;
-- 結果:剩 id 3

進階應用提示:獨占查詢

結合 `OUTPUT` 子句與 `UPDATE TOP (1)` 可實作高併發下的「獨占取號/任務領取」模式:


UPDATE TOP (1) tasks
SET status = 'PROCESSING', worker_id = @myId
OUTPUT inserted.task_id, inserted.payload
WHERE status = 'PENDING';

單一陳述式原子性完成「查詢+鎖定+回傳」,適合平行任務佇列。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved