इस क्वेरी के लिए केवल उन होने अस्थायी तालिका से स्थापित हो जाएगा जहां तालिका नाम के अंत में एक तारीख है:
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();
अब आप #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 कुशल और लूप मुक्त –
बहुत अच्छा, धन्यवाद :) –