테이블 이름의 끝 날짜입니다 만을 갖는 임시 테이블을 채 웁니다이 질의 :
SELECT SCHEMA_NAME(T.schema_id) + '.' + T.name TableName,
REPLACE((RIGHT(T.name, 7) + '_01'), '_', '-') TableDate
INTO #M
FROM sys.tables T
WHERE ISDATE(REPLACE((RIGHT(T.name, 7) + '_01'), '_', '-')) = 1;
다음 부분은 여전히 "현재"있는 모든 테이블을 삭제한다 - 날짜 의미를 확장은 12 개월 윈도우 내에 :
DELETE FROM #M
WHERE DATEADD(MONTH, -12, TableDate) < GETDATE();
이제
테이블을 드롭 동적 SQL을 실행, 당신은 #M
만 일치하는 테이블 왼쪽하고, 그래서 당신은을 통해 단지 루프가 중 방식으로는 원하는 수 (들) :
WHILE (EXISTS (SELECT * FROM #M)) BEGIN
DECLARE @TableName VarChar(100) = (SELECT TOP 1 TableName FROM #M);
DECLARE @SQL NVarChar(1000) = 'DROP TABLE ' + @TableName;
EXEC (@SQL);
DELETE FROM #M WHERE TableName = @TableName;
END;
정리를 들어,뿐만 아니라 임시 테이블을 삭제 : 날짜 다음이 당신에게 목록 날짜를주는 작업을해야 지난 7
DROP TABLE #M;
+1 효율적이고 루프가 없습니다 –
아주 좋은, 고마워요 :) –