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
Must declare the table variable "@tblName".
最佳答案
您无法参数化表名称。您将需要使用动态SQL(无论如何,这不是函数中允许的)。
您可能可以使用UNION ALL
固定表列表和常量的View或CTE来完成您想做的任何事情。您发布的代码毫无意义
(如果称为@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
关于sql-server - 如何在UDF标量函数中将表名作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905860/