1

有没有办法将列名作为参数传递给函数?

我想创建一个函数,根据列过滤值,但我将此列名传递给函数(理想情况下作为字符串)?

我确实尝试过,但我将列名声明为 varchar,显然这不起作用!

4

2 回答 2

6

简短的回答:没有。

唯一的方法是使用动态 SQL。制作一个以字段/表名作为参数的存储过程并构建一个新的 SQL 语句来执行的情况并不少见。

但是,函数不能执行动态 SQL。


可能表明设计方向错误。如果您详细说明为什么需要它,我们也许可以在根本不需要它的地方提供替代设计。

或者,您可能更适合使用存储过程而不是函数。


使用一系列OR条件的想法符合您的描述。但它通常会产生非常糟糕的计划。我将查找我的有用链接,以了解为什么以及如何处理它;它非常深入,但很高兴知道。

编辑这是链接: T-SQL 中的动态搜索条件

于 2012-06-12T16:56:26.030 回答
2

您可以在一些动态 sql 中执行此操作,在其中动态构建查询,或者如果您的字段数量有限,您可以执行类似的操作

select * from table where
(param = 'field1' and field1 = value)
or (param = 'field2' and field2 = value)
于 2012-06-12T16:56:40.450 回答