2012-06-12 73 views
1

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

我想创建一个函数,根据列过滤值,但我将这个列名称传入函数(理想情况下是一个字符串)?

我做了尝试,但我宣布列名称为varchar,显然这不会工作!

+1

这必须是重复的。 – usr

+2

您可以将字段名称作为字符串确定。但是你不能在函数中使用动态SQL,所以你需要条件逻辑来处理所有的情况。 –

+0

您可能可以在CLR编译的用户函数中执行此操作,但这是一大堆工作,可能不会很好地利用您的时间。 –

回答

6

简短回答:不可以。

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

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


可以是错误指向设计的指示。如果你详细说明为什么你需要这个,我们可能会提供替代设计,根本不需要它。

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


使用OR条件链不也满足了像您描述的想法。但它通常会产生非常糟糕的计划。我会查找我的有用链接,以解释为什么以及如何处理它;它非常深入,但非常好知道。

编辑这里的链接:Dynamic Search Conditions in T-SQL

2

你能做到这一点在某些动态SQL,在那里你建立在飞行的查询,或者如果你有场数量有限,你可以做类似

select * from table where 
(param = 'field1' and field1 = value) 
or (param = 'field2' and field2 = value)