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

SQL Server 資料插入全攻略:基本語法、多筆插入、複製資料表與 IDENTITY_INSERT 進階技巧

     編輯:關於SqlServer

INSERT 是資料庫寫入操作的基石。本文從規範寫法延伸至多筆插入、資料表複製、跨表資料遷移,以及突破 IDENTITY 限制的強制寫入技巧,提供完整的資料插入解決方案。

一、插入語句規範與基本寫法

命名規範建議

  • 中文字串前加 N 前綴:N'中文',確保 Unicode 正確儲存。
  • 欄位名以方括號包裹:[欄位名],避免保留字衝突。

標準 INSERT 語法

INSERT INTO TableName ([Column1], [Column2])
VALUES (N'中文', '11ds');

二、單一陳述式插入多筆資料

SQL Server 2008+ 支援 VALUES 多列語法,或傳統 UNION ALL 方式:

現代語法 (建議)

INSERT INTO 表名 ([列1], [列2])
VALUES
    ('值1', '值2'),
    ('值3', '值4'),
    ('值5', '值6');

傳統 UNION ALL 寫法

INSERT INTO 表名 ([列1], [列2])
SELECT '值1', '值2' UNION ALL
SELECT '值3', '值4' UNION ALL
SELECT '值5', '值6';

關鍵差異: UNION 會過濾重複列 (排序去重),UNION ALL 直接合併保留所有列,效能較佳。

三、資料表複製與遷移

1. 完整複製結構與資料到新表

SELECT * INTO NewTable FROM OldTable;

2. 僅複製結構 (不含資料)

-- 方法一:永不成立的條件
SELECT * INTO NewTable FROM OldTable WHERE 1 <> 1;

-- 方法二:TOP 0 (更直觀)
SELECT TOP 0 * INTO NewTable FROM OldTable;

3. 將資料插入既有資料表 (跨表遷移)

INSERT INTO TargetTable (Column1, Column2)
SELECT Column1, Column2 FROM SourceTable;

四、IDENTITY_INSERT:突破自動遞增限制

當需要手動指定 IDENTITY 欄位值時 (如資料遷移保留原鍵值):

-- 1. 開啟允許手動插入
SET IDENTITY_INSERT 表名 ON;

-- 2. 手動指定 ID 值插入
INSERT INTO 表名 (id, name) VALUES (1002, '大二');

-- 3. 關閉手動插入模式
SET IDENTITY_INSERT 表名 OFF;

注意事項:

  • 同一時間僅能有一張資料表開啟 IDENTITY_INSERT。
  • 需具備資料表擁有者或 db_ddladmin 權限。
  • 插入的 ID 值不可重複,否則拋出主鍵衝突錯誤。

效能與維護建議

  • 大量匯入資料時,考慮暫時停用索引與約束,匯入完成後重建。
  • 使用 BULK INSERT 或 bcp 工具處理百萬級以上資料更高效。
  • 跨環境遷移時,IDENTITY_INSERT 確保主鍵一致性,避免外鍵關聯斷裂。

熟練掌握各類插入技巧,能靈活應對從日常開發到大規模資料遷移的各種場景需求。

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