WHERE 条件下的 SQL UDF

Posted

技术标签:

【中文标题】WHERE 条件下的 SQL UDF【英文标题】:SQL UDF in WHERE condition 【发布时间】:2010-01-06 00:01:17 【问题描述】:

我想写一个这样的查询:

CREATE PROCEDURE DupFinder
@FirstName varchar(20),
@LastName varchar(20)

AS

SELECT CustId 
  FROM Cust c 
 WHERE [dbo].[fn_MatchConfidence](@FirstName + ' ' + @LastName,
                                  [dbo].fn_createCustHash (CustId)) > .8

在整个 Cust 表上运行 fn_MatchCondifence 用户定义函数(它接受两个 varchar 并返回一个数字)。 CreateCustHash 只是创建一个中间有空格的 FirstName 和 LastName 字符串。

我该怎么做?

【问题讨论】:

你到底遇到了什么错误? 【参考方案1】:

不要使用标量函数。他们真的很糟糕。

http://msmvps.com/blogs/robfarley/archive/2009/12/05/dangers-of-begin-and-end.aspx

改为使用内联表值函数。

【讨论】:

+1:是的 - 索引,继续最外层的查询。可能在其中做上帝知道... 不是...问题是该函数将在不同的上下文中执行。查看 Profiler,您会看到引擎为每个函数调用启动不同的执行上下文。

以上是关于WHERE 条件下的 SQL UDF的主要内容,如果未能解决你的问题,请参考以下文章

sql where条件中入参判断

SQL语句中连接on条件和where条件的执行顺序

sql中where 之后怎么加if条件判断

SQL语句中where条件的写法

SQL语句where多条件查询怎么写

sql中where 之后怎么加if条件判断