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

SQL 資料操作進階 (八):UPDATE 進階用法、SELECT INTO 建表備份與結構變更繞過技巧

     編輯:關於SqlServer

本系列第八篇深入 UPDATE 陳述式進階語法、多欄位同步更新、WHERE 子句關鍵性、以及善用 SELECT INTO 實現資料備份、跨表複製、結構變更繞過 (刪除欄位、變更型別) 等實務技巧。

UPDATE 進階語法完整形式

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!'。

關鍵警示:未加 WHERE = 全表更新

-- 危險!將 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';

長文字欄位更新:UPDATETEXT

UPDATE 適用一般文字欄位。超長字串 (超過 8KB) 需用 UPDATETEXT,屬進階主題,請參考 SQL Server 文件。

SELECT INTO — 跨表複製與建表備份利器

完整表複製 (結構 + 資料)

SELECT * INTO newtable FROM mytable;

建立 newtable 並複製所有資料。新表無索引、約束、觸發器,僅含欄位定義與資料。

指定欄位複製

SELECT first_column INTO newtable
FROM mytable
WHERE second_column = 'Copy Me!';

僅複製符合條件的列,且只含 first_column。

INSERT ... SELECT — 向既有表追加資料

INSERT INTO mytable (first_column, second_column)
SELECT another_first, another_second
FROM anothertable
WHERE another_first = 'Copy Me!';

適用於既有目標表追加資料,而非建立新表。

繞過 SQL 結構變更限制的實務模式

SQL 標準中:已建立表難以直接刪除欄位、變更資料型別。但可透過「建新表 → 複製資料 → 切換」繞過。

模式 A:刪除欄位

  1. SELECT col1, col3, col4 INTO newtable FROM oldtable; (排除要刪除的 col2)
  2. 驗證新表資料完整性
  3. DROP TABLE oldtable; (或重命名備份)
  4. EXEC sp_rename 'newtable', 'oldtable';
  5. 重建索引、約束、觸發器、權限

模式 B:變更欄位資料型別

  1. 建立新表,目標欄位使用新型別 (如 VARCHAR(20) → INT)
  2. INSERT INTO newtable SELECT col1, CAST(col2 AS INT), col3 FROM oldtable; (搭配轉換函數)
  3. 驗證轉換結果 (注意資料截斷/溢位/轉換失敗)
  4. 同模式 A 切換表名

風險提醒

  • 大表操作需鎖表,影響可用性 → 維護窗口執行、或線上結構變更工具
  • 外鍵參考、檢視表、預存程序、觸發器相依需同步更新
  • 權限、擴充屬性、CDC/Change Tracking 設定需重建

SQL 格式化小技巧

SQL 忽略多餘空白字元。可自由換行、縮排,寫成最易讀格式。
-- 推薦風格:子句換行、縮排對齊
UPDATE mytable
SET first_column = 'Updated!',
    second_column = 'Updated!'
WHERE first_column = 'Update Me1';

本章小結

  • UPDATE 支援多欄位同步更新,務必加 WHERE
  • SELECT INTO 快速建表備份/子集複製
  • INSERT ... SELECT 向既有表跨表追加
  • 「建新表 → 複製 → 切換」模式繞過結構變更限制
  • 大表結構變更需謀劃鎖表、相依物件、權限重建
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved