Вы не можете параметризовать имя таблицы.Вам нужно будет использовать динамический SQL (не то, что это разрешено в функциях в любом случае).
Возможно, вы сможете использовать View или CTE, которые UNION ALL
имеют фиксированный список таблиц и константу, чтобы делать что угоднопытаемся сделать.Код, который вы опубликовали, не имеет большого смысла (вы хотите, чтобы @val2
имел то же значение, что и @tblName
, если таблица с именем @tblName
содержит это же значение в столбце val1
?!), но что-то вроде
;WITH cte AS
(
SELECT 'table1' AS table_name, val1
FROM table1
UNION ALL
SELECT 'table2' AS table_name, val1
FROM table2
)
select @val2=val1 from cte where table_name=@tblName and val1 = @tblName