Решение может быть динамичным, но оно намного сложнее, чем ваш первый блок кода там.
Объявите переменную varchar, достаточно большую, чтобы содержать выбранный вами скрипт (например, @script).
Объявите курсор для перебора ваших таблиц в таблице sysobjects. Это что-то вроде:
declare cc cursor for select name from sysobjects
where type='U' and name like '%yourTableNamePatternHere%'
order by name
Просмотрите записи в цикле while, используя fetch next и @@ fetch_status, соберите большой запрос union в @script и, наконец, используйте sp_executesql, чтобы @script выполнялся сервером.
Вот и все.
Вот скрипт в одном листинге:
declare @n varchar(100), @script nvarchar(2000)
set @script = ''
declare cc cursor for select name from sysobjects where type='u' and name like '%yourTableNamePatternHere%'
open cc
fetch next from cc into @n
while @@fetch_status = 0
begin
if @script <> '' set @script = @script + ' union '
set @script = @script + 'select <column1>, <column2>, ''' + @n + ''' as tableName from ' + @n
fetch next from cc into @n
end
close cc
deallocate cc
-- print @script
exec sp_executesql @script