将整个SQL表复制到另一个并截断原始表

时间:2016-10-18 18:20:27

标签: sql-server stored-procedures sql-server-2014

我正在编写一个存储过程,它将复制名为" CS_Consolidation"的表的全部内容。进入名为" CS_ConsolidationBackup2016"的备份表所有字段都完全相同,每天必须添加新数据,之后必须截断原始表。

然而,我的手术有问题,如果有人可以提供帮助,我的写法如何:

CREATE PROCEDURE BackUpData2
AS
BEGIN
SET NOCOUNT ON;

SELECT *
INTO [dbo].[CS_ConsolidationBackUp]
FROM [dbo].[CS_Consolidation]

TRUNCATE TABLE [dbo].[CS_Consolidation]
GO

3 个答案:

答案 0 :(得分:1)

如果您希望每天创建一个备份表,这样的工作会起作用吗?

DECLARE @BackupTableName nvarchar(250)
SELECT @BackupTableName = 'CS_ConsolidationBackUp'  + CAST(CONVERT(date, getdate()) as varchar(250))
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @BackupTableName) 
BEGIN
    EXEC('DROP TABLE [' + @BackupTableName + ']')
END 
EXEC('SELECT * INTO [dbo].[' + @BackupTableName + '] FROM [dbo].[CS_Consolidation]')
TRUNCATE TABLE [dbo].[CS_Consolidation]

答案 1 :(得分:1)

为什么要复制数据然后删除原始数据?这对您所需的系统来说完全更加复杂和紧张。无需创建数据的第二个副本,以便您可以转身并删除第一个副本。

更简单的路径是重命名为当前表,然后创建新的主表。

EXEC sp_rename 'CS_Consolidation', 'CS_ConsolidationBackUp';
GO
select * 
into CS_Consolidation
from CS_ConsolidationBackUp
where 1 = 0; --this ensures no rows but the entire structure is copied.

答案 2 :(得分:0)

你失踪了,"结束"之前的声明" go"。这是正确的代码:

 CREATE PROCEDURE BackUpData2
 AS
 BEGIN
 SET NOCOUNT ON;

 SELECT *
 INTO [dbo].[CS_ConsolidationBackUp]
 FROM [dbo].[CS_Consolidation]

 TRUNCATE TABLE [dbo].[CS_Consolidation]
 end
 GO