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

SQL UPDATE 語句語法與用法詳解

     編輯:關於SqlServer

UPDATE 陳述式用於修改資料表中現有列的欄位值。本文說明標準語法、參數說明、執行流程與關鍵注意事項。

標準語法

UPDATE table_name
SET column1 = expression1, column2 = expression2, ...
[WHERE search_condition];

參數說明

參數說明
table_name要更新的資料表名稱 (可含結構描述 schema.table)
column要修改的欄位名稱
expression新值運算式:常值、欄位運算、函數、子查詢、CASE 運算式等
WHERE search_condition篩選條件:只有符合條件的列會被更新。省略則更新全表 (極度危險)

執行流程

  1. 依 WHERE 定位符合條件的列 (加鎖)。
  2. 對每列計算 SET 運算式的新值。
  3. 檢查約束 (PK、FK、CHECK、NOT NULL、觸發器)。
  4. 寫入資料頁、記錄異動至交易記錄檔。
  5. 釋放鎖、回傳受影響列數 (@@ROWCOUNT)。

基本範例

-- 單欄更新
UPDATE Products SET UnitPrice = 19.95 WHERE ProductID = 1;

-- 多欄更新
UPDATE Employees 
SET Salary = Salary * 1.05, LastRaiseDate = GETDATE()
WHERE DeptID = 10;

-- 條件運算式更新
UPDATE Orders
SET Status = CASE 
                WHEN ShipDate IS NOT NULL THEN 'Shipped'
                WHEN OrderDate < DATEADD(DAY, -30, GETDATE()) THEN 'Overdue'
                ELSE 'Pending'
             END
WHERE Status <> 'Cancelled';

關鍵注意事項

  • 永遠加 WHERE:生產環境嚴禁無 WHERE 的 UPDATE。
  • 先 SELECT 驗證:用相同 WHERE 先查詢,確認受影響列數與資料正確。
  • 大量更新分批:超過 10,000 列建議分批 (如 `WHERE ID BETWEEN ...`),避免長鎖定、記錄檔暴增、阻塞。
  • NULL 語意:SET col = NULL 會清空欄位;若要保留原值需用 ISNULL/COALESCE。
  • 觸發器:會啟動 AFTER UPDATE / INSTEAD OF UPDATE 觸發器。
  • 權限:需具備資料表 UPDATE 權限 (或透過預存程序授權)。

回傳值

  • @@ROWCOUNT:受影響列數 (0 表示無列符合條件)。
  • 若在觸發器中需回傳給呼叫端,可用 SELECT @RowCount = @@ROWCOUNT。

最佳實務模板

BEGIN TRY
    BEGIN TRANSACTION;
    
    -- 1. 驗證
    DECLARE @Cnt INT;
    SELECT @Cnt = COUNT(*) FROM TargetTable WHERE FilterCol = @Value;
    IF @Cnt = 0
    BEGIN
        RAISERROR(N'無符合條件資料', 16, 1);
    END
    
    -- 2. 更新
    UPDATE TargetTable
    SET Col1 = @NewVal1, Col2 = @NewVal2
    WHERE FilterCol = @Value;
    
    -- 3. 確認
    IF @@ROWCOUNT <> @Cnt
    BEGIN
        RAISERROR(N'受影響列數不符,可能有並發衝突', 16, 1);
    END
    
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
    -- 記錄錯誤、拋出或回傳錯誤碼
    THROW;
END CATCH

UPDATE 是資料修改的核心指令。遵循「先查後改、分批執行、交易包裹、錯誤處理」四原則,即能安全高效完成資料維護。

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