1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| CREATE PROCEDURE [dbo].[P_W_QuestionHisRedeposit] AS BEGIN DECLARE @tableMonth DATETIME, @tableDate NVARCHAR(10), @tableName NVARCHAR(50), @sql NVARCHAR(2000), @error INT; SET @error = 0; DECLARE @monthSpan INT;
SELECT @tableMonth = MIN([RecordTime]) FROM [dbo].[Question_His]; SET @monthSpan = DATEDIFF(MONTH, @tableMonth, GETDATE());
DECLARE @i INT, @ErrMsg nvarchar(4000), @ErrSeverity int; SET @i = 1; WHILE @i <= @monthSpan -- 遍历转存每月历史数据 BEGIN SET @tableMonth = DATEADD(MONTH, -@i, GETDATE()); SET @tableDate = CONVERT(VARCHAR(10), DATEADD(MONTH, DATEDIFF(MONTH, 0, @tableMonth), 0), 120); SET @tableName = '[dbo].[Question_His_' + @tableDate + ']';
IF NOT EXISTS (SELECT 1 FROM [dbo].[Question_His] WHERE DATEDIFF(MONTH, [RecordTime], GETDATE()) = @i) BEGIN SET @i = @i + 1; CONTINUE; END
IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@tableName) AND type IN (N'U')) BEGIN BEGIN TRY BEGIN TRANSACTION SET @sql = 'CREATE TABLE ' + @tableName + ' ( [Id] [INT], [QuestionID] [VARCHAR](500), [Answers] [VARCHAR](MAX), [Result] [FLOAT], [UserID] [VARCHAR](100), [RecordTime] [DATETIME] )'; EXECUTE(@sql); SET @error = @error + @@ERROR;
SET @sql = 'INSERT INTO '+ @tableName +' SELECT * FROM [dbo].[Question_His]' + ' WHERE DATEDIFF(MONTH, [RecordTime], GETDATE()) = '+ CAST(@i AS NVARCHAR(10)); EXECUTE(@sql); SET @error = @error + @@ERROR;
SET @sql = 'DELETE FROM [dbo].[Question_His] WHERE DATEDIFF(MONTH, [RecordTime], GETDATE()) = '+ CAST(@i AS NVARCHAR(10)); EXECUTE(@sql); SET @error = @error + @@ERROR; COMMIT END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1) END CATCH END SET @i = @i + 1; END END
|