2016-10-18 1 views
0

「CS_ConsolidationBackup2016」というバックアップテーブルに「CS_Consolidation」というテーブルの内容全体をコピーするストアドプロシージャを作成しています。毎日追加する必要があります。それ以降は元のテーブルを切り捨てる必要があります。SQLテーブル全体を別のテーブルにコピーして元のテーブルを切り捨てる

しかし私は、私の手順で問題が生じていますし、どのように誰でも助けることができるならば、それは書かれている:あなたは「行く」前の文を「終了」行方不明とされている

CREATE PROCEDURE BackUpData2 
AS 
BEGIN 
SET NOCOUNT ON; 

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

TRUNCATE TABLE [dbo].[CS_Consolidation] 
GO 
+2

問題は? –

+0

どのようなエラーが表示されますか? –

+0

テーブルを何らかの形でロックしない限り、select intoとtruncateの間にいくつかのレコードが失われる可能性があることに注意してください。 CS_Consolidationからの削除を使用することでこれが前に行われていることがわかりました。ここで、Identifier In CS_ConsolidationBackUp。しかし、削除は切り捨てることをしません... –

答えて

1

毎日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] 
0

。これは正しいコードです:

 
CREATE PROCEDURE BackUpData2 
AS 
BEGIN 
SET NOCOUNT ON; 

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

TRUNCATE TABLE [dbo].[CS_Consolidation] 
end 
GO 
1

なぜデータをコピーして元のデータを削除したいのですか?これは、システム全体がより複雑でストレスに満ちています。データの2番目のコピーを作成する必要がないため、最初のコピーを回してドロップするだけです。

現在のテーブルに名前を変更して新しいプライマリテーブルを作成する方が簡単です。

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. 
関連する問題