Если таблицы меняются со временем, вы можете встроить код своего решения в SP (псевдокод - вам нужно будет заполнить):
SET @sql = ''
DECLARE CURSOR FOR
SELECT t.[name] AS TABLE_NAME
FROM sys.tables t
WHERE t.[name] LIKE 'SOME_PATTERN_TO_IDENTIFY_THE_TABLES'
- или это
DECLARE CURSOR FOR
SELECT t.[name] AS TABLE_NAME
FROM TABLE_OF_TABLES_TO_SEACRH t
START LOOP
IF @sql <> '' SET @sql = @sql + 'UNION ALL '
SET @sql = 'SELECT * FROM [' + @TABLE_NAME + '] WHERE section_id=value '
END LOOP
EXEC(@sql)
Я иногда использовал эту технику, когда просто не существует очевидного способа сделать ее будущей без динамического SQL.
Примечание: В вашем цикле вы можете использовать трюк распространения COALESCE / NULL и оставить строку как NULL перед циклом, но это не так ясно, если вы не знакомы с идиомой:
SET @sql = COALESCE(@sql + ' UNION ALL ', '')
+ 'SELECT * FROM [' + @TABLE_NAME + '] WHERE section_id=value '