LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SELECT INTO vs INSERT INTO SELECT:SQL表复制语句详解

admin
2026年4月15日 15:0 本文热度 49

今天我们来聊聊SQL Server中两种常用的表复制语句,让你轻松应对数据复制场景!

一、一句话核心区别

对比项
INSERT INTO SELECT
SELECT INTO
目标表
必须已存在自动创建
适用场景
追加数据到现有表
快速备份、创建新表

二、INSERT INTO SELECT:向已有表插入数据

基本语法

INSERT INTO 目标表(字段1, 字段2)SELECT 字段1, 字段2 FROM 源表

完整示例

-- 1. 创建测试表CREATE TABLE Table1 (a varchar(10), b varchar(10), c varchar(10))CREATE TABLE Table2 (a varchar(10), c varchar(10), d int)GO
-- 2. 插入测试数据INSERT INTO Table1 VALUES('赵''asds''90')INSERT INTO Table1 VALUES('钱''asds''100')INSERT INTO Table1 VALUES('孙''asds''80')GO
-- 3. 复制数据(Table2必须存在)INSERT INTO Table2(a, c, d) SELECT a, c, 5 FROM Table1GO
-- 4. 查看结果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 源表

完整示例

-- 1. 创建源表CREATE TABLE Table1 (a varchar(10), b varchar(10), c varchar(10))GO
-- 2. 插入测试数据INSERT INTO Table1 VALUES('赵''asds''90')INSERT INTO Table1 VALUES('钱''asds''100')INSERT INTO Table1 VALUES('孙''asds''80')GO
-- 3. 创建新表并复制数据(Table2自动创建)SELECT a, c INTO Table2 FROM Table1GO
-- 4. 查看结果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:数据归档

-- 归档2023年前数据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后手动创建索引SELECT * INTO BigTable_Copy FROM BigTableCREATE INDEX IX_Copy_ID ON BigTable_Copy(ID)

六、常见问题处理

1. 处理IDENTITY列

-- 保留IDENTITY属性SELECT IDENTITY(int11AS 新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值

-- 使用默认值替代NULLINSERT INTO Table2(col1, col2)SELECT ISNULL(col1, '默认值'), ISNULL(col2, 0FROM Table1

总结

  • INSERT INTO SELECT:目标表必须存在,适合追加数据

  • SELECT INTO:自动创建新表,适合备份和临时表

  • 两种语句都不会复制约束、索引和默认值

  • 大批量操作注意事务日志和锁等待


阅读原文:原文链接


该文章在 2026/4/15 18:16:32 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号