SQL Server - 创建数据库表的副本并将其放在同一个数据库中?

seq*_*ner 90 sql t-sql sql-server-2008 sql-server-2008-r2

我在数据库DB中有一个表ABC.我想在同一个DB中创建名为ABC_1,ABC_2,ABC_3的ABC副本.如何使用Management Studio(最好)或SQL查询来做到这一点?

这适用于SQL Server 2008 R2.

Mah*_*mal 182

用途SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;
Run Code Online (Sandbox Code Playgroud)

这将创建一个ABC_1具有相同列结构ABC并包含相同数据的新表.但是,约束(例如,键,默认值)不会被复制.

您可以每次使用不同的表名多次运行此查询.


如果您不需要复制数据,只需创建具有相同列结构的新空表,请添加WHERE带有falsy表达式的子句:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
Run Code Online (Sandbox Code Playgroud)

  • 不起作用....原始中的计算列不会在目标中复制为相同的列.此外,也不会复制PK和默认约束 (6认同)
  • 完美回答我的问题. (3认同)
  • 当然,它不能完全起作用。他警告说约束不会被复制,主键或默认值也不会被复制。他提供的命令将创建一个具有相同列结构的新表(就像他说的那样),并将所有数据插入到您的新表中。 (2认同)
  • 我发现使用 `SELECT TOP(0) *` 比总是错误的 `WHERE` 语句方法更干净 (2认同)

Joh*_*van 16

通过SSMS UI复制架构(生成DDL)

在SSMS中,在对象资源管理器中展开数据库,转到表格,右键单击您感兴趣的表格,然后选择" 脚本表格为"," 创建到"," 新建查询编辑器窗口".执行查找和替换(CTRL + H)以更改表名称(即放入ABC" 查找内容"字段并ABC_1在" 替换为"中单击" 确定").

通过T-SQL复制架构

显示如何通过SQL执行此操作的其他答案也运行良好,但与此方法的区别在于您还将获得任何索引,约束和触发器.

复制数据

如果要包含数据,请在创建此表后运行以下脚本以从ABC复制所有数据(如果您有标识字段,则保留相同的ID值):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
Run Code Online (Sandbox Code Playgroud)

  • 您必须将“ IDENTITY_INSERT”设置为“ ON”,以允许“手动”设置身份列,并在示例中混合了顺序。另外,您必须明确列出您的列 (3认同)
  • 谢谢@jean; 发现6年后就被发现了!固定。 (2认同)

Rou*_*man 7

如果要复制具有所有约束和键的表,请执行以下步骤:

  1. 在SQL Management Studio中打开数据库。
  2. 右键单击要复制的表。
  3. 选择脚本表为->创建至->新建查询编辑器窗口。这将生成一个脚本以在新的查询窗口中重新创建表。
  4. 更改表名以及​​脚本中的相对键和约束。
  5. 执行脚本。

然后,要复制数据,请运行以下脚本:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF
Run Code Online (Sandbox Code Playgroud)


Cla*_*ude 5

第一个选项

select *
  into ABC_1
  from ABC;
Run Code Online (Sandbox Code Playgroud)

第二个选项:使用SSIS,即在对象资源管理器中右键单击数据库>所有任务>导出数据

  • 源和目标:您的数据库
  • 源表:ABC
  • 目标表:ABC_1(将创建表)