markdown #hello world ```sql /* 目標 : 在同一個資料庫內會將去年的今天資料搬移到 QName 內, 完成後執行搬移的語法到別的資料庫, 並在每個月月初重新命名。 (搬移到別DB再重新命名的原因 : 因小弟不會使用IIS來抓取不同名字的Table表,因此固定抓取QName做搬移比較簡單。) --每天的上午06:00執行 */ --指定資料庫 USE [WebPData] GO --宣告變數以便將當月的數值寫程Table_Name --設定追朔日期 ( 計算本身採用加, 所以要寫負號來表示過去日 ) DECLARE @SP int SET @SP = 0 --設定搬移年分 ( 計算本身採用加, 所以要寫負號來表示過去年 ) DECLARE @SP_Year INT SET @SP_Year = -1 DECLARE @Monthtemp char(2) DECLARE @Month char(2) DECLARE @Daytemp char(2) DECLARE @Day char(2) DECLARE @StrDate nvarchar(10) --DECLARE @EndDate nvarchar(10) /*--修改成每個月初凌晨時執行sp_ReQName的重新命名工作 --宣告變數來儲存Table表的名稱 DECLARE @Name nvarchar(50) DECLARE @PName nvarchar(50) DECLARE @PMonthtemp char(2) DECLARE @PMonth char(2) */ --判斷當下月份 SET @Monthtemp = month(getdate()) --SELECT @Monthtemp AS 'Getdate' --判斷月份是否需要補0 IF @Monthtemp < 10 BEGIN SET @Month = '0'+@Monthtemp END ELSE BEGIN SET @Month = @Monthtemp END --驗證日期正確有補0 SELECT @Month AS 'Month' --判斷當天日期 SET @Daytemp = DAY(GETDATE() + @SP ) --判斷日期是否需要補0 IF @Daytemp < 10 BEGIN SET @Day = '0'+@Daytemp END ELSE BEGIN SET @Day = @Daytemp END --驗證日期正確有補0 --SELECT @Day AS 'Day' --拼湊@SP_Year年前的昨天日期 SET @StrDate = RIGHT((year(getdate())+@SP_Year),2) + '/' + @Month + '/' + @Day SELECT @StrDate AS 'StrDate' ----------Add Table QName並將檔案匯入---------- --檢查是QName是否存在後再建立表 IF NOT EXISTS ( SELECT [name],[create_date] FROM [sys].[tables] WHERE [name] = 'QName' -- AND [create_date] > GETDATE()-1 ) BEGIN CREATE TABLE [dbo].[QName] ( [ProjNodeId] [INT] NULL, [LogDate] [VARCHAR](12) NULL, [LogTime] [VARCHAR](12) NULL, [Priority] [VARCHAR](5) NULL, [TagName] [VARCHAR](32) NULL, [Description] [VARCHAR](65) NULL, [Action] [VARCHAR](80) NULL, [UserName] [VARCHAR](32) NULL, [NodeName] [VARCHAR](32) NULL, [NodeIP] [VARCHAR](32) NULL, [AlmGroup] [VARCHAR](5) NULL ) ON [PRIMARY] END IF EXISTS ( SELECT [name],[create_date] FROM [sys].[tables] WHERE [name] = 'QName' --AND [create_date] >= @The_Beginning_of_Last_Month ) BEGIN --將去年當天資料匯入QName insert INTO [dbo].[QName] ( [ProjNodeId] ,[LogDate] ,[LogTime] ,[Priority] ,[TagName] ,[Description] ,[Action] ,[UserName] ,[NodeName] ,[NodeIP] ,[AlmGroup] ) SELECT [ProjNodeId] ,[LogDate] ,[LogTime] ,[Priority] ,[TagName] ,[Description] ,[Action] ,[UserName] ,[NodeName] ,[NodeIP] ,[AlmGroup] FROM [dbo].[BwAlarmTable] WHERE [LogDate] = @StrDate ORDER BY [LogTime] DESC --匯入完成後刪除資料 --宣告變數 @counts 來確認資料數量的比對 DECLARE @QTable_counts NVARCHAR(100) SET @QTable_counts = ( SELECT COUNT(*) FROM [dbo].[Qname] WHERE [LogDate] = @StrDate ) SELECT @QTable_counts AS '搬移的總數量' DECLARE @OrgTable_counts NVARCHAR(100) SET @OrgTable_counts = ( SELECT COUNT(*) FROM [dbo].[BwAlarmTable] WHERE [LogDate] = @StrDate ) SELECT @OrgTable_counts AS '原本表內的總數量' --確認資料有匯入後移除原本表內的資料 IF @QTable_counts = @OrgTable_counts BEGIN DELETE FROM [dbo].[BwAlarmTable] WHERE LogDate = @StrDate END END /*--Agent內新增的語法 每月月底下午23:00執行重新命名 DECLARE @Name nvarchar(50) DECLARE @Monthtemp char(2) DECLARE @Month char(2) --判斷當下月份 SET @Monthtemp = month(getdate()) --SELECT @Monthtemp --判斷月份是否需要補0 IF @Monthtemp < 10 BEGIN SET @Month = '0'+@Monthtemp END ELSE BEGIN SET @Month = @Monthtemp END SET @Name = 'BwAlarmTable-' + CONVERT(char(4),year(getdate())-2) + @Month IF EXISTS (SELECT * FROM [Test].[sys].[tables] WHERE [name] = 'QName') BEGIN EXEC sp_rename 'QName', @Name END IF EXISTS (SELECT * FROM [Test].[sys].[tables] WHERE [name] = 'QName') BEGIN EXEC sp_rename 'QName', @Name END */ /*--修改成每個月初凌晨時執行sp_ReQName的重新命名工作留著當足跡 --判斷前一個月 SET @pMonthtemp = month(getdate())-1 --判斷月份是否需要補0 SET @PMonth = @Month-1 IF @PMonth < 10 BEGIN SET @PMonth = '0'+@PMonth END ELSE BEGIN SET @PMonth = @PMonth END --拼湊@SP_Year年前的當月表名稱, 並將前一個月的表更名 ( 因素考量改搬移到別的資料庫後再執行重新命名 ) IF @Day = 1 BEGIN SET @Name = 'BwAlarmTable-' + CONVERT(char(4),year(getdate())-@SP_Year) + @Month IF EXISTS (SELECT * FROM [Test].[sys].[tables] WHERE [name] = 'QName') BEGIN EXEC sp_rename 'QName', @Name END END ----------以下刪除 QName Table的判斷---------- SELECT * FROM [sys].[tables] SELECT DATEADD(mm, -13, DATEADD(mm, DATEDIFF(mm, '', GETDATE()), ''))+1 --確認表內重複的名稱沒有清除且不是當日生成的 IF EXISTS ( SELECT [name],[create_date] FROM [sys].[tables] WHERE [name] = 'QName' AND [create_date] < GETDATE() ) BEGIN --確認表是否仍有資料 DECLARE @counts NVARCHAR(100) SET @counts = (SELECT COUNT(*) FROM [dbo].[Qname]) --如果有資料先修改名稱,待工程師來時再進行手動搬移至別的資料庫。 IF @counts >= 1 BEGIN EXEC sp_rename 'QName', @Name END --確認沒資料直接刪除 ELSE BEGIN DROP TABLE QName END END --修改成每個月初凌晨時執行sp_ReQName的重新命名工作 --DECLARE @The_Beginning_of_Last_Month DATETIME --SET @The_Beginning_of_Last_Month = (SELECT DATEADD(mm, -12, DATEADD(mm, DATEDIFF(mm, '', GETDATE()), ''))) --SELECT @The_Beginning_of_Last_Month --SELECT @The_Beginning_of_Last_Month IF EXISTS ( SELECT [name],[create_date] FROM [sys].[tables] WHERE [name] = 'QName' AND [create_date] < @The_Beginning_of_Last_Month ) BEGIN EXEC sp_rename 'QName', @PName END */ ``` ![單模光纖](http://images.100y.com.tw/Images/NewShop/ShopDescription/109170/109170-6.jpg)

留言