替代SQL嵌套游标
问题描述:
我已经创建嵌套游标基本上比较一个表的另一个列值的列值,并返回最接近的匹配。替代SQL嵌套游标
表的内容被说:
(的ColumnName和值如下) 表A
**Names**
MandarinOrange
SweetApple
SourApple
AppleThatTasteslikeGrapes
表B
**Names**
PlainOrange
SourOrange
Grapple
.
.
.
所以光标1(外光标)取各并且与表2中的所有名称进行比较并返回最接近的匹配。光标2(内部)用于检索表2中的名称
我想看看,如果有acheive使用游标 (因为实在是太慢了)
答
避免光标始终是一个更好的做法,并在你的情况,我认为这是可以实现的相同avaoiding方式。关键在于您为了评估比较结果而执行的计算。
一种解决方案是创建一个函数有两个字符串并返回一个1/0值作为比较结果。然后你可以调用该函数作为SELECT语句的一部分并保存游标迭代。
下面是这样一个函数的一个例子:
CREATE FUNCTION fn_Compare
(
@firstValue varchar(50),
@secondValue varchar(50)
)
RETURNS bit
AS
BEGIN
DECLARE @Result bit
SET @Result = 0 --False by default
--!Here goes your specific logic for comparing string!
IF @firstValue = @secondValue
SET @Result = 1
RETURN @Result
END
GO
--Use it in a sentance
SELECT dbo.fn_Compare('TEST', 'TEST') AS Match --True
SELECT dbo.fn_Compare('TEST', 'TEST2') AS Match --False
--Use it in a query
SELECT
name,
name,
dbo.fn_Compare(name, name) AS Match
FROM sysobjects
WHERE
Type = 'u'
--Cleanup
DROP FUNCTION fn_Compare
我希望这有助于。
编辑您的问题,包括你的代码。 – 2012-04-27 16:42:41
你能否详细说明你如何确定“最接近的匹配”?它是一个专有的溶液或者是它的一些基本逻辑被包括在从表A - 用于例如以名称名称的TableB中的值:'其中tableA_value LIKE“%” + tableB_value +“%”' – 2012-04-27 17:01:54