我在数据库 DB 中有一个表 ABC 。我想在同一个数据库中创建名称为 ABC_1、ABC_2、ABC_3 的 ABC 副本。我如何使用 Management Studio(最好)或 SQL 查询来做到这一点?
这适用于 SQL Server 2008 R2。
使用
SELECT ... INTO
:
SELECT *
INTO ABC_1
FROM ABC;
这将创建一个新表
ABC_1
,其列结构与 ABC
相同并包含相同的数据。然而,约束(例如键、默认值)不会被复制。
您可以每次使用不同的表名称多次运行此查询。
如果不需要复制数据,只需要创建一个具有相同列结构的新空表,请添加带有假表达式的
WHERE
子句:
SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
在 SSMS 中,在 Object Explorer 中展开数据库,转到 Tables,右键单击您感兴趣的表,然后选择 Script Table As、Create To、New Query Editor Window。 执行查找和替换 (CTRL + H) 以更改表名称(即,将
ABC
放入 Find What 字段中,将 ABC_1
放入 Replace With 中,然后单击 OK)。
显示如何通过 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
如果您想复制表及其所有约束和键,请按照以下步骤操作:
然后运行以下脚本来复制数据:
SET IDENTITY_INSERT DuplicateTable ON
INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... )
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable
SET IDENTITY_INSERT DuplicateTable OFF
第一个选项
select *
into ABC_1
from ABC;
第二个选项:使用SSIS,即在对象资源管理器中右键单击数据库>所有任务>导出数据
这是另一种选择:
select top 0 * into <new_table> from <original_table>
您需要编写SSIS来复制表及其数据、约束和触发器。我们的组织中有一个由 kalrom Systems 开发的名为 Kal Admin 的软件,该软件有免费版本可供下载(我认为复制表功能是可选的)
如果你想做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
在 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';
使用sql server manegement studio或者netcat这样会更容易操作sql