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的主要内容,如果未能解决你的问题,请参考以下文章