如何将表名作为UDF标量函数中的参数传递?

时间:2011-02-05 08:22:26

标签: sql-server tsql stored-procedures error-handling

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

这个查询出了什么问题,它引发了以下错误

  

Msg 1087,Level 15,State 2,Procedure test,Line 11
  必须声明表变量“@tblName”。

2 个答案:

答案 0 :(得分:1)

@ tblName1在函数参数

中声明为@tblName

答案 1 :(得分:1)

您无法参数化表名称。您需要使用动态SQL(而不是在函数中允许这样做)。

您可以使用UNION ALL固定的表列表和常量来查看或CTE来执行您要执行的任何操作。你发布的代码没什么意义 (如果名为@val2的值在@tblName列中包含相同的值,那么您希望@tblNameval1具有相同的值吗?!) / p>

;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