Использовать UNION, запрос формировать динамически.
Список таблиц:
SELECT name FROM sysobjects WHERE name like 'very_strong_table_%' AND type = 'U'
На его основе формируйте запрос.
как можно используя юнион сформировать такой запрос?
Так как вас учили. Я бы использовал курсор, я к ним привык.
НапримерDECLARE @TAB VARCHAR(500), @SQL VARCHAR(1000)
SET @SQL = '--'
DECLARE LISTTABLEE CURSOR LOCAL FAST_FORWARD FOR
SELECT name FROM sysobjects WHERE name like 'very_strong_table_%' AND type = 'U'
OPEN LISTTABLEE
FETCH LISTTABLEE INTO @TAB
WHILE @@FETCH_STATUS = 0 BEGIN
SET @SQL = @SQL + CHAR(13)+CHAR(10)+'SELECT * FROM '+ @TAB
FETCH LISTTABLEE INTO @TAB
IF @@FETCH_STATUS = 0
SET @SQL = @SQL + CHAR(13)+CHAR(10)+'UNION'
END
CLOSE LISTTABLEE
DEALLOCATE LISTTABLEE
PRINT @SQL
EXECUTE(@SQL)
docs.microsoft.com
Замечание: использовать множество таблиц вместо одной — очень большая ошибка. Тем более если таблицы имеют одинаковые параметры, например, находятся в одном файле.
К сожалению, архитектуру делал не я, а вендор решения.
Тут возможно несколько решений. Например, сделать представление содержащее UNION из списка таблиц. Или создать самому
одну таблицу, а приложению подсовывать синонимы.
CREATE SYNONYM [dbo].[very_strong_table_20170109] FOR [dbo].[very_strong_table_all]