Для статичних запитів, таких як ваш запитання, назви таблиць та назви стовпців повинні бути статичними.
Для динамічних запитів ви повинні динамічно генерувати повний SQL, і використовувати sp_executesql для його виконання.
Ось приклад сценарію, який використовується для порівняння даних між одними і тими ж таблицями різних баз даних:
статичний запит:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
оскільки я хочу легко змінити ім'я, table
і schema
я створив цей динамічний запит:
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
Оскільки в динамічних запитах є багато деталей, які потрібно враховувати, і їх важко дотримуватися, рекомендую прочитати: Прокляття та благословення динамічного SQL