我正在编写一个存储过程,它将复制名为" 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
答案 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