как передать имя таблицы в качестве параметра в функции скалера UD? - PullRequest
0 голосов
/ 05 февраля 2011
create function test
(
  @tblName as  sysname,
  @category as varchar(50)
)
returns int
as
begin 
  declare @val2 as int
  select @val2=val1 from @tblName where val1=@tblName 
  return @val2
end

Что не так с этим запросом, он выдает следующую ошибку

Сообщение 1087, Уровень 15, Состояние 2, Тест процедуры, Строка 11
Необходимо объявить переменную таблицы "@tblName ".

Ответы [ 2 ]

1 голос
/ 05 февраля 2011

Вы не можете параметризовать имя таблицы.Вам нужно будет использовать динамический 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
1 голос
/ 05 февраля 2011

@ tblName1 в параметре функции имеет значение @tblName

...