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”。
答案 0 :(得分:1)
@ tblName1在函数参数
中声明为@tblName答案 1 :(得分:1)
您无法参数化表名称。您需要使用动态SQL(而不是在函数中允许这样做)。
您可以使用UNION ALL
固定的表列表和常量来查看或CTE来执行您要执行的任何操作。你发布的代码没什么意义
(如果名为@val2
的值在@tblName
列中包含相同的值,那么您希望@tblName
与val1
具有相同的值吗?!) / 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