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

问题描述 投票:0回答:9

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

这适用于 SQL Server 2008 R2。

sql sql-server-2008 t-sql sql-server-2008-r2
9个回答
407
投票

使用

SELECT ... INTO

SELECT *
INTO ABC_1
FROM ABC;

这将创建一个新表

ABC_1
,其列结构与
ABC
相同并包含相同的数据。然而,约束(例如键、默认值)不会被复制。

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


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

WHERE
子句:

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

34
投票

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

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

ABC
放入 Find What 字段中,将
ABC_1
放入 Replace With 中,然后单击 OK)。

通过 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

29
投票

如果您想复制表及其所有约束和键,请按照以下步骤操作:

  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

7
投票

第一个选项

select *
  into ABC_1
  from ABC;

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

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

3
投票

这是另一种选择:

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

1
投票

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


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

0
投票

在 SQL Server 中备份表的存储过程

-- This stored procedure creates a backup of a specified table
-- by copying its data into a new table with a timestamped name.

CREATE OR ALTER PROCEDURE sp_BackupTable(@tableName NVARCHAR(500))
AS
BEGIN
    -- Declare variables for dynamic SQL and timestamp
    DECLARE @sql NVARCHAR(2000); -- Dynamic SQL statement
    DECLARE @nowDate NVARCHAR(50) = FORMAT(GETDATE(), 'yyyyMMdd_HHmmss'); -- Current timestamp

    -- Construct the dynamic SQL statement
    SET @sql = N'SELECT * INTO ' + QUOTENAME(@tableName + '_Backup_' + @nowDate) + 
               N' FROM ' + QUOTENAME(@tableName) + N';';

    -- Execute the dynamic SQL statement
    EXEC sp_executesql @sql;
END
GO
EXEC sp_BackupTable @tableName = 'TABLE_NAME';

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.