Таблица T похожа на вашу таблицу, я заполнил ее тестовыми данными, близкими к вашим, заполненные вами таблицы будут созданы, если их не будет.
Попытка воссоздать ваш стол
CREATE TABLE T(name varchar(10), date datetime)
insert t values('RecordA','2011-08-30')
insert t values('RecordB','2011-08-31')
insert t values('RecordC','2011-09-01')
insert t values('RecordD','2011-09-02')
Этот синтаксис будет при необходимости создавать и заполнять таблицы, такие как TABLE_YYYY_MM. ГГГГ и ММ - любая найденная комбинация таблицы T
Declare @tablename varchar(64)
Declare @sql as varchar(max)
Declare @d as datetime
Declare dCursor CURSOR FAST_FORWARD FOR
SELECT DISTINCT dateadd(month, datediff(m, 0, date), 0) date from t
OPEN dCursor
FETCH NEXT FROM dCursor
INTO @d
WHILE @@FETCH_STATUS = 0
BEGIN
SET @tablename = '[TABLE_'+replace(CONVERT(VARCHAR(7), @d, 121), '-', '_') + ']'
SET @SQL =
'if OBJECT_ID('''+@tablename+''', ''U'') is null
BEGIN
Declare @sql2 varchar(max)
SET @sql2 = ''SELECT * INTO '+@tablename+'
FROM t WHERE 1 = 2''
EXEC(@sql2)
END
INSERT INTO '+ @tablename+'
SELECT * FROM t
WHERE datediff(m, 0, date)=' + CAST(datediff(m, 0, @d) AS VARCHAR(10))
EXEC(@SQL)
FETCH NEXT FROM dCursor
INTO @d
END
CLOSE dCursor
DEALLOCATE dCursor