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

我有一个数据库数据库表 ABC。我想在同一个数据库中创建名为 ABC _ 1、 ABC _ 2、 ABC _ 3的 ABC 副本。如何使用 ManagementStudio (最好是)或 SQL 查询实现这一点?

这是针对 SQLServer2008R2的。

260844 次浏览

使用 SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

这将创建一个新的表 ABC_1,它具有与 ABC相同的列结构并包含相同的数据。然而,约束(例如键、默认值)是不可复制的。

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


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

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

第一个选择

select *
into ABC_1
from ABC;

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

  • 来源和目标: 你的数据库
  • 来源表: ABC
  • Target table: ABC _ 1(将创建表)

使用 sql 服务器管理工作室或 netcat,这将更容易操作 sql

通过 SSMS UI 复制模式(生成 DDL)

在 SSMS 中,在 对象资源管理器中展开数据库,转到 桌子,右键单击感兴趣的表并选择 脚本表 A创建新的查询编辑器窗口。 执行查找和替换(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

这是另一种选择:

select top 0 * into <new_table> from <original_table>

您需要编写 SSIS 来复制表及其数据、约束和触发器。我们的组织中有一个由 kalrom Systems 开发的名为 Kal Admin 的软件,它有一个免费的下载版本(我认为拷贝表功能是可选的)

如果你想复制表及其所有的约束和键,请按照下面的步骤:

  1. 在 SQLManagementStudio 中打开数据库。
  2. 右键单击要复制的表。
  3. 选择 Script Table as-> Create to-> New Query Editor 窗口。 这将生成一个脚本,以在新的查询窗口中重新创建表。
  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

如果你想做 N 次(在现实世界中可能不太实际) ,你可以试试这个:

declare @counter int
set @counter = 2
declare @tname NVARCHAR(100)
DECLARE @SQString NVARCHAR(MAX)
while(@counter <= 20) -- duplicate 20 times
begin
SET @tname= concat('Table_',@counter)
SET @SQString = 'select * into ' + @tname + ' from Table_1'
EXEC (@SQString)
set @counter = @counter + 1
End