Один из способов - установить динамический SQL, например:
DECLARE @Command varchar(1000)
SELECT @Command = replace('select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
Другим способом было бы создание представлений (или синонимов или связанных определений серверов), которые ссылаются на «целевую» базу данных, например,
DECLARE @Command varchar(1000)
SELECT @Command = replace('CREATE VIEW SomeView AS select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
Это создаст представление, на которое может ссылаться постоянный (то есть нединамический) код. Это не будет работать так хорошо, если целевая база данных часто меняется или если у вас много целевых баз данных.
Но, честно говоря, реальный ответ заключается в том, что нет, вы не можете сделать это вообще легко, и вы должны сделать все возможное, чтобы избежать ситуаций, когда вы должны это сделать. Поверьте мне, это может быть кошмар отладки и обслуживания.