使用表名删除超过12个月的表

Vin*_*ith 5 sql t-sql sql-server sql-server-2008

我希望能够删除超过12个月的表格.表格的名称中包含日期(月份和年份).例如TABLE_A_2011_01,日期为January 2011.

我想要做的是删除那些日期部分超过12个月的表.如果今天的日期是September 15, 2011我要删除所有比旧的表September 15, 2010.

Aar*_*and 4

DECLARE @sql NVARCHAR(MAX) = N'';

;WITH p(o,d) AS
(
    SELECT QUOTENAME(SCHEMA_NAME([schema_id])) + '.' + QUOTENAME(name),
        d = RIGHT(REPLACE(name, '_', ''), 6) + '01'
      FROM sys.tables 
      WHERE ISDATE(RIGHT(REPLACE(name, '_', ''), 6) + '01') = 1 
)
SELECT @sql += 'DROP TABLE ' + o + ';' FROM p
    WHERE d < CONVERT(CHAR(8), DATEADD(MONTH, -12, CURRENT_TIMESTAMP), 112);

PRINT @sql;
--EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)