sql-server - 如何在UDF标量函数中将表名作为参数传递?

标签 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
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/

相关文章:

sql-server - 是否可以在 sqlkata 中查询参数化表值函数?

c# - SQL Server 存储过程返回值,并在 C# 中使用

c# - 如何使用 ADO.NET 和存储过程在数据库中保存复杂的 C# 对象?

sql - 连接+时间差

sql-server - Azure 函数中的 SQL 连接

SQL DATEDIFF 不工作?

mysql - SQL Server中使用游标生成随机ID

mysql - vb6 中的属性值无效

php - 将 SQL 查询循环合并为一个 SQL 查询

xml - SQL Server XML 列存在()查询