SQL嵌套游标的替代方案

时间:2012-04-27 16:38:04

标签: tsql cursor sql-server-2000

我创建了嵌套游标,它基本上将一个表的列值与另一个表的列值进行比较,并返回最接近的匹配。

表的内容是:

(ColumnName和Values如下) 表A

**Names**
MandarinOrange
SweetApple
SourApple
AppleThatTasteslikeGrapes

表B

**Names**
PlainOrange
SourOrange
Grapple
.
.
.

因此Cursor1(外部游标)从table1中获取每个名称并与Table2中的所有名称进行比较,并返回最接近的匹配.Cursor 2(内部)是检索表2中的名称

我希望看到,如果有一种方法可以使用游标实现相同的avaoiding (因为它太慢了)

1 个答案:

答案 0 :(得分:0)

避免使用游标总是更好的做法,在您的情况下,我认为游标也是可以实现的。它的关键是您为评估比较结果而执行的计算。

一种解决方案是创建一个函数,取两个字符串并返回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

我希望这会有所帮助。