136

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

这适用于 SQL Server 2008 R2。

4

8 回答 8

274

使用SELECT ... INTO

SELECT *
INTO ABC_1
FROM ABC;

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

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


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

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
于 2013-03-15T08:57:21.563 回答
28

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

在 SSMS 中,在Object Explorer中展开您的数据库,转到Tables,右键单击您感兴趣的表,然后选择Script Table AsCreate ToNew Query Editor Window。执行查找和替换(CTRL + H)以更改表名(即放入ABCFind What字段并ABC_1Replace With然后单击OK)。

通过 T-SQL 复制 Schema

显示如何通过 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
于 2013-03-15T09:16:15.817 回答
16

如果要复制具有所有约束和键的表,请按照以下步骤操作:

  1. 在 SQL Management Studio 中打开数据库。
  2. 右键单击要复制的表。
  3. 选择 Script Table as -> Create to -> New Query Editor Window。这将生成一个脚本以在新的查询窗口中重新创建表。
  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
于 2017-09-11T02:14:52.180 回答
4

第一个选项

select *
  into ABC_1
  from ABC;

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

  • 源和目标:您的数据库
  • 源表:ABC
  • 目标表:ABC_1(将创建表)
于 2013-03-15T08:59:23.067 回答
2

这是另一种选择:

select top 0 * into <new_table> from <original_table>
于 2016-05-11T02:23:11.463 回答
1

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

于 2016-06-01T04:57:36.303 回答
0

使用 sql server manegement studio 或 netcat 会更容易操作 sql

于 2013-03-15T08:59:39.613 回答
0

如果你想做 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
于 2021-09-30T16:38:55.230 回答