在数据库中一次只保留3个FY表,其余所有表都需要删除

时间:2017-11-17 11:03:48

标签: sql sql-server sql-server-2008

我想在我的数据库中只保留3个财务年度表,我需要删除表

意味着我有一张类似

的表格
KT201705, KT201502 , KT201412 , KT201605 , KT201709 , KT201506

本财政年度为2017-2018 上一财政年度2016-2017 2015-2016财年的最后一个财政年度

我想保留像

这样的表格
KT201705,  
KT201605,    
KT201709,  
KT201506

我想删除在财政年度之前创建的所有表格,这意味着像

这样的表格
KT201412,   
KT201502

我尝试了什么:

select 'DROP TABLE ' + NAME from sys.tables
WHERE NAME LIKE 'KT2%' 

但我无法弄清楚财政年度的部分。

我还检查了这个查询:

SELECT CASE WHEN DatePart(Month, convert(varchar(10),GETDATE(),112)) >= 4
        THEN DatePart(Year, convert(varchar(10),GETDATE(),112)) + 1
        ELSE DatePart(Year,convert(varchar(10),GETDATE(),112))
   END AS Fiscal_Year

但它只给出了当前的财政年度。

任何人都可以知道如何继续前进吗?

1 个答案:

答案 0 :(得分:0)

这会有效吗

;WITH cteNum
AS(
    SELECT N = ROW_NUMBER()OVER(ORDER BY (SELECT NULL))
    FROM master.dbo.spt_values V
)
SELECT 'DROP TABLE ' + NAME 
FROM sys.tables 
CROSS APPLY cteNum N
WHERE NAME LIKE 'KT'+ CONVERT(NVARCHAR(4),DATEADD(YEAR, -N.N, GETDATE()), 102) + '%'
AND N.N >= 2 AND  N.N <=10

略微修改的相同查询返回此日期列表

;WITH cteNum
AS(
    SELECT N = ROW_NUMBER()OVER(ORDER BY (SELECT NULL))
    FROM master.dbo.spt_values V
)
SELECT yyyyDate = CONVERT(NVARCHAR(4),DATEADD(YEAR, -N.N, GETDATE()), 102)
FROM cteNum N
WHERE N.N >= 2 AND  N.N <=10

enter image description here