今天我们来聊聊SQL Server中两种常用的表复制语句,让你轻松应对数据复制场景!
一、一句话核心区别
二、INSERT INTO SELECT:向已有表插入数据
基本语法
INSERT INTO 目标表(字段1, 字段2)SELECT 字段1, 字段2 FROM 源表
完整示例
CREATE TABLE Table1 (a varchar(10), b varchar(10), c varchar(10))CREATE TABLE Table2 (a varchar(10), c varchar(10), d int)GO
INSERT INTO Table1 VALUES('赵', 'asds', '90')INSERT INTO Table1 VALUES('钱', 'asds', '100')INSERT INTO Table1 VALUES('孙', 'asds', '80')GO
INSERT INTO Table2(a, c, d) SELECT a, c, 5 FROM Table1GO
SELECT * FROM Table2
实用技巧
-- 插入常量INSERT INTO Table2(a, c, d) SELECT a, c, 100 FROM Table1
-- 带条件复制INSERT INTO Table2(a, c, d) SELECT a, c, 5 FROM Table1 WHERE c > 80
三、SELECT INTO:创建新表并复制数据
基本语法
SELECT 字段1, 字段2 INTO 新表 FROM 源表
完整示例
CREATE TABLE Table1 (a varchar(10), b varchar(10), c varchar(10))GO
INSERT INTO Table1 VALUES('赵', 'asds', '90')INSERT INTO Table1 VALUES('钱', 'asds', '100')INSERT INTO Table1 VALUES('孙', 'asds', '80')GO
SELECT a, c INTO Table2 FROM Table1GO
SELECT * FROM Table2
实用技巧
SELECT * INTO Table2 FROM Table1 WHERE 1=0
SELECT a, c INTO #TempTable FROM Table1
SELECT * INTO OtherDB.dbo.Table2 FROM CurrentDB.dbo.Table1
四、实际应用场景
场景1:数据备份
SELECT * INTO Table1_Backup_20240317 FROM Table1
场景2:数据归档
SELECT * INTO Orders_Archive FROM Orders WHERE OrderDate < '2023-01-01'DELETE FROM Orders WHERE OrderDate < '2023-01-01'
场景3:创建报表
SELECT YEAR(OrderDate) AS 年份, MONTH(OrderDate) AS 月份, SUM(Amount) AS 总金额INTO 月度报表FROM OrdersGROUP BY YEAR(OrderDate), MONTH(OrderDate)
五、性能优化小贴士
1. 批量处理
DECLARE @BatchSize INT = 10000WHILE 1=1BEGIN INSERT INTO Table2 SELECT TOP (@BatchSize) * FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2)
IF @@ROWCOUNT < @BatchSize BREAKEND
2. 索引处理
SELECT * INTO BigTable_Copy FROM BigTableCREATE INDEX IX_Copy_ID ON BigTable_Copy(ID)
六、常见问题处理
1. 处理IDENTITY列
SELECT IDENTITY(int, 1, 1) AS 新ID, * INTO Table2 FROM Table1
2. 避免主键冲突
INSERT INTO Table2SELECT * FROM Table1 t1WHERE NOT EXISTS (SELECT 1 FROM Table2 t2 WHERE t2.ID = t1.ID)
3. 处理NULL值
INSERT INTO Table2(col1, col2)SELECT ISNULL(col1, '默认值'), ISNULL(col2, 0) FROM Table1
总结
阅读原文:原文链接
该文章在 2026/4/15 18:16:32 编辑过