本文详细介绍了在SQL Server中快速新建一张结构与原表完全一致的新表,并实现数据迁移的多种实用方法,内容涵盖了利用SELECT INTO、CREATE TABLE AS SELECT以及SSMS复制向导等技巧,旨在帮助用户高效完成数据库结构复制与数据同步工作。
在数据库开发和管理过程中,我们经常需要创建一个与现有表结构完全一致的新表,用于测试、数据备份或临时存储,在 SQL Server 中,实现“新建一张一样的表”主要有几种方法,具体取决于你是否需要复制数据,以及你对自增列(Identity)的处理要求。
以下是几种最常用的操作方法及详细步骤:
使用 SELECT INTO(仅复制结构,不复制数据)
这是最快的方法,适用于只需要表结构(列名、数据类型、约束),但不需要原有数据的情况。

核心语法:
SELECT * INTO 新表名 FROM 旧表名 WHERE 1=0;
代码示例:
假设我们要基于 Users 表创建一个名为 Users_Backup 的空表:
SELECT * INTO Users_Backup FROM Users WHERE 1=0;
注意事项:
WHERE 1=0的作用: 这是一个常用的技巧。1=0永远为假,所以不会选取任何数据行,但 SQL Server 会保留SELECT后面的字段定义和表结构,从而创建一个空表。- 自增列问题: 使用此方法创建的新表,原有的
IDENTITY(自增)属性通常会被重置,默认从 1 开始。
使用 CREATE TABLE AS SELECT(现代 SQL Server 版本)
如果你使用的是较新版本的 SQL Server(如 SQL Server 2019 或 SQL Server 2022),可以使用更标准的 SQL 语法。
核心语法:
CREATE TABLE 新表名 AS SELECT * FROM 旧表名;
代码示例:
CREATE TABLE Users_Copy AS SELECT * FROM Users;
注意: 这条语句会复制结构和数据,如果你只想复制结构,可以在 SELECT 中加上 WHERE 条件,WHERE 1=0。
使用 INSERT INTO 复制数据到已存在的表
如果你已经手动创建了一个空表(结构相同),只想把数据复制过去:
核心语法:
INSERT INTO 新表名 SELECT * FROM 旧表名;
代码示例:
-- 1. 先手动创建一个空表(确保字段类型一致) CREATE TABLE Users_New (ID INT, Name NVARCHAR(50)); -- 2. 将旧表的数据插入到新表 INSERT INTO Users_New SELECT * FROM Users;
使用 SSMS 图形界面(适合非技术人员)
如果你不想写代码,可以使用 SQL Server Management Studio (SSMS) 的图形工具:
- 在“对象资源管理器”中,右键点击你要复制的表。
- 选择 “任务” -> “复制” -> “创建目标表”。
- SSMS 会弹出一个向导,点击“下一步”直到完成,它会自动生成一个带有相同结构的空表。
⚠️ 重要提示:自增列和约束的处理
在使用 SELECT INTO 方法时,你需要特别注意以下两点:
- 主键和索引:
SELECT INTO不会自动复制主键(PK)和索引,新表将是空的且没有主键。 - 自增列重置: 新表创建后,其自增列通常会变成普通列,且自增值会重置为 1。
**修复自增列
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

