本系列第八篇深入 UPDATE 陳述式進階語法、多欄位同步更新、WHERE 子句關鍵性、以及善用 SELECT INTO 實現資料備份、跨表複製、結構變更繞過 (刪除欄位、變更型別) 等實務技巧。
UPDATE {table_name | view_name}
SET {column_list | variable_list | variable_and_column_list}
[, {column_list2 | ...}] ...
[WHERE clause];
UPDATE mytable
SET first_column = 'Updated!'
WHERE second_column = 'Update Me!';
所有 second_column = 'Update Me!' 的列,first_column 更新為 'Updated!'。
-- 危險!將 titles 表所有書籍價格加倍
UPDATE titles SET price = price * 2;
生產環境鐵律:UPDATE / DELETE 執行前,必先用相同 WHERE 執行 SELECT 確認影響範圍。
UPDATE mytable
SET first_column = 'Updated!',
second_column = 'Updated!',
third_column = 'Updated!'
WHERE first_column = 'Update Me1';
UPDATE 適用一般文字欄位。超長字串 (超過 8KB) 需用 UPDATETEXT,屬進階主題,請參考 SQL Server 文件。
SELECT * INTO newtable FROM mytable;
建立 newtable 並複製所有資料。新表無索引、約束、觸發器,僅含欄位定義與資料。
SELECT first_column INTO newtable
FROM mytable
WHERE second_column = 'Copy Me!';
僅複製符合條件的列,且只含 first_column。
INSERT INTO mytable (first_column, second_column)
SELECT another_first, another_second
FROM anothertable
WHERE another_first = 'Copy Me!';
適用於既有目標表追加資料,而非建立新表。
SQL 標準中:已建立表難以直接刪除欄位、變更資料型別。但可透過「建新表 → 複製資料 → 切換」繞過。
SELECT col1, col3, col4 INTO newtable FROM oldtable; (排除要刪除的 col2)DROP TABLE oldtable; (或重命名備份)EXEC sp_rename 'newtable', 'oldtable';VARCHAR(20) → INT)INSERT INTO newtable SELECT col1, CAST(col2 AS INT), col3 FROM oldtable; (搭配轉換函數)SQL 忽略多餘空白字元。可自由換行、縮排,寫成最易讀格式。
-- 推薦風格:子句換行、縮排對齊
UPDATE mytable
SET first_column = 'Updated!',
second_column = 'Updated!'
WHERE first_column = 'Update Me1';
UPDATE 支援多欄位同步更新,務必加 WHERESELECT INTO 快速建表備份/子集複製INSERT ... SELECT 向既有表跨表追加