Para consultas estáticas, como la de su pregunta, los nombres de tabla y columna deben ser estáticos.
Para consultas dinámicas, debe generar el SQL completo dinámicamente y usar sp_executesql para ejecutarlo.
Aquí hay un ejemplo de un script utilizado para comparar datos entre las mismas tablas de diferentes bases de datos:
consulta estática:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Como quiero cambiar fácilmente el nombre de table
y schema
he creado esta consulta dinámica:
declare @schema varchar(50)
declare @table varchar(50)
declare @query nvarchar(500)
set @schema = 'dbo'
set @table = 'ACTY'
set @query = 'SELECT * FROM [DB_ONE].['+ @schema +'].[' + @table + '] EXCEPT SELECT * FROM [DB_TWO].['+ @schema +'].[' + @table + ']'
EXEC sp_executesql @query
Dado que las consultas dinámicas tienen muchos detalles que deben considerarse y son difíciles de mantener, le recomiendo que lea: La maldición y las bendiciones del SQL dinámico