2016-12-15 5 views
0

У нас есть ужасно разработанная база данных, в которой есть процедуры, которые генерируют новые таблицы каждую неделю, и делали это в течение нескольких лет. У него есть SQL-скрипт, который получает 200 + столбцов данных через запросы в разных таблицах, выгружает их все в одну таблицу под названием «Выбор», а затем после этого вы должны вручную переименовывать эту таблицу (Selections_Week001, Selections_Week002 и т. Д.) Каждую неделю. Теперь у нас есть около 100 таблиц. Я хочу сделать все эти данные в одну таблицу, столбец с указанием исходной исходной таблицы (001, 002 и т. Д.), Поэтому я могу избавиться от всех этих отдельных таблиц. Есть ли способ сделать это, используя какой-то SQL-скрипт, или мне придется вручную отредактировать и запустить 100 запросов append?Объединение таблиц в один

+1

Вы можете объединить их все вместе в одном запросе и сделать одну вставку, но это будет убийцей, если у вас много данных. Я бы создал скрипт, который делает их за один раз (вы можете легко создавать множество скриптов в чем-то вроде excel). Я бы предпочел, чтобы это контролировало все сразу. –

+0

Мое мнение: я бы подумал о том, чтобы использовать для этого какой-то язык сценариев, так как динамический sql излишне худший. – AndreasT

+0

Я просто надеялся написать что-то, что могло бы динамически захватить каждое имя таблицы и автоматически сделать добавление для всех таблиц, без необходимости переписывать его 100 раз –

ответ

1

Попробуйте это для меня хорошо работали на тестовых данных:

select * 
into Selections_Total 
from Selections_Week001 
where 1=0 
alter table Selections_Total 
add Original_Table varchar(64) 

--select * From Selections_Total 

declare @sql varchar(max) 
select @sql = COALESCE(@sql + ' UNION ALL select *, ''' + name + ''' from ', 'select *, ''' + name + ''' from ') + name 
from sys.tables where name like 'Selections_Week%' 

--select @sql 
insert into Selections_Total 
exec(@sql) 

UPD: пропустил with a column indicating its original source table на первый. Теперь исправлено.

+0

"' где 1 = 0' "--- что это должно делать? – WillardSolutions

+0

выберите 0 строк из таблицы, чтобы скопировать только структуру –

+0

Ницца, это хорошо работает на таблицах, которые есть, спасибо за помощь, Андрей! –

Смежные вопросы