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
*/
```

留言
張貼留言